基于区块链的时间戳生成方法、装置、系统及存储介质
技术领域
本申请涉及区块链领域,特别是涉及一种基于区块链的时间戳生成方法、装置、系统及存储介质。
背景技术
在区块链系统中,典型的区块头中都包含有一个时间戳,用来表示这个区块的生成时间。时间戳是一个能表示一份数据在某个特定时间之前已经存在的可验证数据,通常是一个字符序列,唯一地标识某一刻的时间。
在区块链系统的具体场景中,时间戳是控制区块生成速度的主要因素。具体地,以基于区块链系统的比特币场景为例,比特币每隔2016个区块会调整一次区块的生成难度,调整难度后产生新区块的间隔时长为之前的2016个区块的总时长,而总时长需要根据已产生区块中的时间戳进行计算。由于区块链系统中的各节点均可能产生区块,并且区块链系统中各节点自身的本地时间往往存在差异,因此无法保证区块中时间戳的整体可靠性,进而难以确保区块链系统的可用性。
由此可见,提供一种基于区块链的时间戳生成方法,以相对确保区块中时间戳的整体可靠性,进而确保区块链系统的可用性,是本领域技术人员需要解决的问题。
发明内容
本申请的目的是提供一种基于区块链的时间戳生成方法、装置、系统及存储介质,以相对确保区块中时间戳的整体可靠性,进而确保区块链系统的可用性。
为解决上述技术问题,本申请提供一种基于区块链的时间戳生成方法,包括:
获取本地节点时间,并接收至少一个其它节点传入的其它节点时间;
根据其它节点时间以及本地节点时间计算结果时间;
将结果时间设置为当前区块生成时的时间戳。
优选的,根据其它节点时间以及本地节点时间计算结果时间,包括:
计算其它节点时间与本地节点时间的中位数,并将中位数作为结果时间;或者,
计算其它节点时间与本地节点时间的平均数,并将平均数作为结果时间;或者,
计算其它节点时间与本地节点时间的加权平均数,并将加权平均数作为结果时间。
优选的,在计算其它节点时间与本地节点时间的中位数,并将中位数作为结果时间之前,方法还包括:
获取本地节点权重以及其它节点的其它节点权重;
计算本地节点权重与其它节点权重之间的权重比例;
根据权重比例增加相应数量的本地节点时间及其它节点时间,本地节点时间与其它节点时间之间的数量比例与所示权重比例一致。
优选的,获取本地节点时间包括:
获取系统时间,并获取在当前区块之前一个区块的历史时间戳;
根据历史时间戳以及区块生成间隔相加计算当前生成时间;
将系统时间与当前生成时间之间的最大值标定为本地节点时间。
优选的,接收至少一个其它节点传入的其它节点时间,包括:
接收至少一个其它节点依照区块生成间隔传入的其它节点时间。
优选的,获取在当前区块之前一个区块的历史时间戳之前,方法还包括:
判断在当前区块之前是否存在区块;
如果是,则执行获取在当前区块之前一个区块的历史时间戳的步骤;
否则,将历史时间戳设置为0。
优选的,在根据其它节点时间以及本地节点时间计算结果时间之前,方法还包括:
接收其它节点传入的数字签名;
判断其它节点时间是否与数字签名匹配;
如果是,则执行根据其它节点时间以及本地节点时间计算结果时间的步骤。
此外,本发明还提供一种基于区块链的时间戳生成方法,包括:
获取系统时间,并获取当前区块之前一个区块的历史时间戳;
根据历史时间戳以及区块生成间隔相加计算当前生成时间;
将系统时间与当前生成时间之间的最大值作为其它节点时间发送至区块生成节点。
此外,本发明还提供一种基于区块链的时间戳生成装置,装置包括存储器、处理器和总线,存储器上存储有可由总线传输至处理器并在处理器上运行的基于区块链的时间戳生成程序,基于区块链的时间戳生成程序被处理器执行时实现如上述的基于区块链的时间戳生成方法。
此外,本发明还提供一种基于区块链的时间戳生成系统,系统包括:
时间获取模块,用于获取本地节点时间,并接收至少一个其它节点传入的其它节点时间;
时间计算模块,用于根据其它节点时间以及本地节点时间计算结果时间;
时间戳设置模块,用于将结果时间设置为当前区块生成时的时间戳。
此外,本发明还提供一种计算机可读存储介质,计算机可读存储介质上存储有基于区块链的时间戳生成程序,基于区块链的时间戳生成程序可被一个或者多个处理器执行,以实现如上述的基于区块链的时间戳生成方法。
本申请所提供的基于区块链的时间戳生成方法,首先获取本地节点时间,并接收区块链节点传入的其它节点时间,进而进行其它节点时间以及本地节点时间综合之间的计算产生结果时间,最终将结果时间设置为当前区块生成时的时间戳。本方法在当区块链节点生成当前区块的时间戳时,同时参考其它区块链节点提供的其它节点时间以及本地节点时间,相对确保了时间戳的整体可靠性,进而确保了区块链系统的可用性。此外,本申请还提供一种基于区块链的时间戳生成装置、系统及存储介质,有益效果同上所述。
附图说明
为了更清楚地说明本申请实施例,下面将对实施例中所需要使用的附图做简单的介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例提供的一种基于区块链的时间戳生成方法的流程图;
图2为本申请实施例提供的一种基于区块链的时间戳生成方法的流程图;
图3为本申请实施例提供的一种基于区块链的时间戳生成方法的流程图;
图4为本申请实施例提供的一种基于区块链的时间戳生成方法的流程图;
图5为本申请实施例提供的一种基于区块链的时间戳生成装置的结构图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下,所获得的所有其他实施例,都属于本申请保护范围。
在区块链系统的具体场景中,时间戳是控制区块生成速度的主要因素。具体地,以基于区块链系统的比特币场景为例,比特币每隔2016个区块会调整一次区块的生成难度,调整难度后产生新区块的间隔时长为之前的2016个区块的总时长,而总时长需要根据已产生区块中的时间戳进行计算。由于区块链系统中的各节点均可能产生区块,并且区块链系统中各节点自身的本地时间往往存在差异,因此无法保证区块中时间戳的整体可靠性,进而难以确保区块链系统的可用性。
本申请的核心是提供一种基于区块链的时间戳生成方法,以相对确保区块中时间戳的整体可靠性,进而确保区块链系统的可用性。此外,本申请还提供一种基于区块链的时间戳生成装置、系统及存储介质,有益效果同上所述。
为了使本技术领域的人员更好地理解本申请方案,下面结合附图和具体实施方式对本申请作进一步的详细说明。
图1为本申请实施例提供的一种基于区块链的时间戳生成方法的流程图。请参考图1,基于区块链的时间戳生成方法的具体步骤包括:
步骤S10:获取本地节点时间,并接收至少一个其它节点传入的其它节点时间。
需要说明的是,本步骤的执行主体可以为区块链系统中产生区块的区块生成节点,区块中记录有交易数据等一系列信息,为了能够确保区块链中其它区块链节点能够获悉该区块的生成时刻,因此区块链生成节点需要进一步以时间戳的方式对该区块进行标记。
本实施例的重点在于时间戳需要通过区块链系统中的全部区块链节点协商生成,并且对于时间戳的协商是基于各个区块链节点提供的节点时间进行的,因此在本步骤中区块生成节点获取本地节点时间,并且接收区块链系统中的其它区块链节点传入的其它节点时间,以此用于在后续步骤中根据本地节点时间以及其它节点时间生成计算时间戳。
步骤S11:根据其它节点时间以及本地节点时间计算结果时间。
本步骤是基于其它节点时间以及本地节点时间进行综合的计算生成相应的结果时间,目的是使结果时间基于区块链网络中的多个节点的系统时间共同产生,确保后续将结果时间作为当前区块生成时的时间戳的准确性。
作为优选的一种实施方式,根据其它节点时间以及本地节点时间计算结果时间,包括:
根据其它节点时间与本地节点时间计算中位数、平均数或加权平均数,并作为结果时间。
当然本领域技术人员应当知晓,还可以有其它合适的计算方式用于根据其它节点时间和本地节点时间来计算结果时间,在此不再一一列举。
需要强调的是,当计算其它节点时间与本地节点时间中的中位数并作为结果时间时,过程具体是将其它节点时间以及本地节点时间按照升序或降序的排序方式进行排列,进而在序列中获取中间位置的时间,该时间即为中位数,可以理解是,中位数时间指的是其它节点时间与本地节点时间中的中位数。
中位数是按顺序排列的一组数据中居于中间位置的数,即在这组数据中,有一半的数据比他大,有一半的数据比他小。例如,有一组数据:X1,X2...XN,用m0.5来表示中位数,按从小到大对数据的顺序排序为:X(1),X(2)...X(N),则当N为奇数时,m0.5=X(N+1)/2;当N为偶数时,
在计算得到中位数时间后,将中位数时间设置为当前生成区块的时间戳。由于在实际的应用场景中,当产生交易记录后,包含该交易记录相关信息的区块则随即生成,而时间戳需要通过区块链节点之间进一步协商生成,因此在本申请技术方案中,当前区块的生成往往先于时间戳,因此在基于区块链的时间戳生成后,可以通过将时间戳封装至新区块,并将新区块追加至当前区块的方式实现对当前区块设置时间戳的目的。
另外,当计算其它节点时间与本地节点时间中的平均数或加权平均数并作为结果时间时,过程具体是将全部的其它节点时间与本地节点时间进行相加运算,并用相加后的结果与其它时间节点与本地节点时间的总数做商运算,最终获取到各个节点时间的平均数。计算平均数与加权平均数的区别在于,加权平均数相比于平均数而言,在将全部的其它节点时间与本地节点时间进行相加运算之前,先对各个节点时间赋予一定的权重系数,权重系数的具体数值可以根据具体情况进行合适的设置,例如对于一定历史时间内服务质量较高、稳定性较好或无作恶记录的节点赋予较高的权重,相反将服务质量较差、稳定性较低或有作恶记录的节点赋予较低的权重。
步骤S12:将结果时间设置为当前区块生成时的时间戳。
本申请所提供的基于区块链的时间戳生成方法,首先获取本地节点时间,并接收区块链节点传入的其它节点时间,进而进行其它节点时间以及本地节点时间综合之间的计算产生结果时间,最终将结果时间设置为当前区块生成时的时间戳。本方法在当区块链节点生成当前区块的时间戳时,同时参考其它区块链节点提供的其它节点时间以及本地节点时间,相对确保了时间戳的整体可靠性,进而确保了区块链系统的可用性。
图2为本申请实施例提供的一种基于区块链的时间戳生成方法的流程图。请参考图2,基于区块链的时间戳生成方法的具体步骤包括:
步骤S20:获取系统时间,并获取当前区块之前一个区块的历史时间戳。
需要说明的是,本步骤中获取的系统时间指的是区块生成节点工作时所遵照的时间。另外,历史时间戳指的是当前区块链之前的一个区块对应的时间戳。
步骤S21:根据历史时间戳以及区块生成间隔相加计算当前生成时间。
需要说明的是,本步骤中的生成间隔是区块链系统在工作过程中遵照的区块生成周期,具体可以根据区块链系统实际的工作场景需求而设置,例如将生成间隔预先设置为10分钟时,则表示生成相邻区块的时间间隔为10分钟,当前区块与其之前一个区块之间的生成间隔在理论上应至少为10分钟。
在区块链系统中设置生成间隔的目的是控制区块的生成速率,能够相对避免因区块生成速率过快而导致的区块链节点运算资源占用程度过大的情况,进而相对确保区块链系统的整体稳定性。
本步骤根据历史时间戳以及区块生成间隔计算当前生成时间,也就是基于历史时间戳表征的时间进一步累计生成间隔对应的时长,进而生成当前区块在理论上的当前生成时间。
步骤S22:将系统时间与当前生成时间之间的最大值标定为本地节点时间。
需要说明的是,本步骤的目的是确保最大程度的提高相邻区块之间的生成间隔,以此最大程度的降低区块链节点生成区块的频率,进而减少对区块链节点中运算资源的占用,确保区块链系统的整体稳定性。
步骤S23:接收至少一个其它节点传入的其它节点时间。
步骤S24:根据其它节点时间以及本地节点时间计算结果时间。
步骤S25:将结果时间设置为当前区块生成时的时间戳。
本实施例能够相对避免因区块生成速率过快而导致的区块链节点运算资源占用程度过大的情况,进而相对确保区块链系统的整体稳定性。
在上述实施例的基础上,作为一种优选的实施方式,接收至少一个其它节点传入的其它节点时间,包括:
接收至少一个其它节点依照区块生成间隔传入的其它节点时间。
需要说明的是,由于考虑到当区块生成节点接收到其它区块链节点传入的其它节点时间后,会直接进行时间戳的计算,进而在生成时间戳后将该时间戳封装为区块并追加至区块链中,因此在生成当前区块后会在短时间内在此生成用于记录当前区块时间戳的新区块追加至当前区块,可能对区块生成节点中的资源造成过多的占用,因此为了相对降低区块生成节点产生区块的速率,并以此确保区块生成节点以及整体区块链系统的稳定性,本实施方式中传入其它节点时间的区块链节点需要依照区块生成间隔传入其它节点时间,以此确保区块生成速度的整体可控,确保区块生成节点以及整体区块链系统的稳定性。
另外,作为一种优选的实施方式,获取当前区块之前一个区块的历史时间戳之前,方法还包括:
判断当前区块之前是否存在区块;
如果是,则执行获取当前区块之前一个区块的历史时间戳的步骤;
否则,将历史时间戳设置为0。
需要说明的是,本实施方式考虑到可能存当前区块是整个区块链系统中第一个区块的情况,因此本实施方式在获取当前区块之前一个区块的历史时间戳之前,先判断当前区块之前是否存在区块,只有在当前区块之前存在区块的情况下,才进一步获取当前区块之前一个区块的历史时间戳,如果当前区块之前不存在区块时,则将历史时间戳设置为0。本实施方式进一步确保了基于区块链的时间戳生成过程的可靠性,进而确保了区块链系统的整体可用性。
图3为本申请实施例提供的一种基于区块链的时间戳生成方法的流程图。请参考图3,基于区块链的时间戳生成方法的具体步骤包括:
步骤S30:获取本地节点时间,并接收至少一个其它节点传入的其它节点时间。
步骤S31:接收其它节点传入的数字签名。
步骤S32:判断其它节点时间是否与数字签名匹配,如果是,则执行步骤S33,否则,执行步骤S35。
需要说明的是,本实施例的重点在于在区块生成节点除了接收其它区块链节点传入的其它节点时间之外,还需要接收其它区块链节点传入的数字签名,数字签名与其它节点时间之间应存在对应关系,数字签名的意义是验证其它节点时间的可用性。
区块链节点生成数字签名过程,通常是先对其生成的其它节点时间进行特征提取,生成该其它节点时间对应的特征值,如Hash值,特征值能够唯一表征该其它节点时间,进而利用区块生成节点的公钥对该特征值进行签名,生成数字签名。由于数字签名中包含有其它节点时间的特征值,区块生成节点在收到其它区块链节点传入的其它节点时间以及相应的数字签名后,对其它节点时间进行特征提取,并与通过私钥解密数字签名后的值进行比较,如果一致,即其它节点时间与数字签名匹配,则说明其它节点时间没有被篡改或数据损坏,具有可用性,因此,本步骤在判断其它节点时间与数字签名匹配时,进一步根据其它节点时间与本地节点时间计算结果时间。
步骤S33:根据其它节点时间以及本地节点时间计算结果时间。
步骤S34:将结果时间设置为当前区块生成时的时间戳。
步骤S35:删除其它节点时间。
本实施方式能够相对确保其它节点时间的可用性,进而确保所生成时间戳的整体可用性。
此外,在上述一系列实施例的基础上,作为一种优选的实施方式,在计算其它节点时间与本地节点时间的中位数,并将中位数作为结果时间之前,方法还包括:
获取本地节点权重以及其它节点的其它节点权重;
计算本地节点权重与其它节点权重之间的权重比例;
根据权重比例增加相应数量的本地节点时间及其它节点时间,本地节点时间与其它节点时间之间的数量比例与所示权重比例一致。
需要说明的是,本实施方式是考虑到实际应用场景中,区块链系统中的不同区块链节点的可信程度或重要性程度往往不同,因此在协商生成时间戳的过程中,对于具有不同可信程度或重要性程度的区块链节点而言,协商过程的侧重也所有不同,因此本实施方式,计算其它节点时间与本地节点时间的中位数,并将中位数作为结果时间之前,获取本地节点权重以及区块链节点的其它节点权重,进而根据本地节点权重与其它节点权重之间的权重比例增加相应数量的本地节点时间及其它节点时间,目的是确保本地节点时间与其它节点时间之间的数量比例与所示权重比例一致。本实施方式能够进一步提高基于区块链的时间戳生成的整体准确性。
举个例子,在根据其它节点时间与本地节点时间计算中位数的场景中,假设区块链系统中有V1,V2,V3和V4共4个区块链节点,他们的权重分别是1,2,1,3,他们的时间分别为1556340594,1556340595,1556340598和155634059,那么根据权重比例增加相应数量之后得到的数组为1556340594、1556340595、1556340595、1556340598、155634059、155634059、155634059,按照中位数的方法,得到的中位数为1556340598,也就是说我们取1556340598这个中位数作为时间戳。
图4为本申请实施例提供的一种基于区块链的时间戳生成方法的流程图。请参考图4,基于区块链的时间戳生成方法的具体步骤包括:
步骤S40:获取系统时间,并获取当前区块之前一个区块的历史时间戳。
步骤S41:根据历史时间戳以及区块生成间隔相加计算当前生成时间。
步骤S42:将系统时间与当前生成时间之间的最大值作为其它节点时间发送至区块生成节点。
需要说明的是,本实施提供的基于区块链的时间戳生成方法的执行主体可以为区块链系统中除区块生成节点以外的其它区块链节点,其它区块链节点通过向区块生成节点提供其它节点时间,以供区块生成节点生成当前区块对应的时间戳。
本方法在当区块链节点生成当前区块的时间戳时,同时参考其它区块链节点提供的其它节点时间以及本地节点时间,将其它节点时间以及本地节点时间排序后处于中间位置的中位数时间作为当前区块生成时对应的时间戳,能够排除恶意节点的错误时间,并选取全部时间中相对适中的时间生成时间戳,相对确保了时间戳的整体可靠性,进而确保了区块链系统的可用性。
在上文中对于基于区块链的时间戳生成方法的实施例进行了详细的描述,本申请还提供一种与该方法对应的基于区块链的时间戳生成装置,由于基于区块链的时间戳生成装置部分的实施例与方法部分的实施例相互对应,基于区块链的时间戳生成装置部分的实施例请参见方法部分的实施例的描述,这里暂不赘述。
图5为本申请实施例提供的一种基于区块链的时间戳生成装置的结构图。
请参考图5,本申请实施例提供的一种基于区块链的时间戳生成装置1,包括存储器11、处理器12和总线13,存储器11上存储有可由总线13传输至处理器12并在处理器12上运行的基于区块链的时间戳生成程序,基于区块链的时间戳生成程序被处理器执行时实现如上述的基于区块链的时间戳生成方法。
该基于区块链的时间戳生成装置1可以是组成CDN网络或者区块链网络的节点。可以是组成CDN网络或者区块链网络的节点。
其中,存储器11至少包括一种类型的可读存储介质,可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、磁性存储器、磁盘、光盘等。存储器11在一些实施例中可以是基于区块链的时间戳生成装置1的内部存储单元,例如该基于区块链的时间戳生成装置1的硬盘。存储器11在另一些实施例中也可以是基于区块链的时间戳生成装置1的外部存储设备,例如基于区块链的时间戳生成装置1上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。进一步地,存储器11还可以既包括基于区块链的时间戳生成装置1的内部存储单元也包括外部存储设备。存储器11不仅可以用于存储安装于基于区块链的时间戳生成装置1的应用软件及各类数据,例如视频转码程序的代码等,还可以用于暂时地存储已经输出或者将要输出的数据。
处理器12在一些实施例中可以是一中央处理器(Central Processing Unit,CPU)、控制器、微控制器、微处理器或其他数据处理芯片,用于运行存储器11中存储的程序代码或处理数据,例如执行视频转码程序等。
该总线13可以是外设部件互连标准(peripheral component interconnect,简称PCI)总线或扩展工业标准结构(extended industry standard architecture,简称EISA)总线等。该总线可以分为地址总线、数据总线、控制总线等。为便于表示,图5中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
本申请所提供的基于区块链的时间戳生成装置,首先获取本地节点时间,并接收区块链节点传入的其它节点时间,进而进行其它节点时间以及本地节点时间综合之间的计算产生结果时间,最终将结果时间设置为当前区块生成时的时间戳。本装置在当区块链节点生成当前区块的时间戳时,同时参考其它区块链节点提供的其它节点时间以及本地节点时间,相对确保了时间戳的整体可靠性,进而确保了区块链系统的可用性。
此外,本申请还提供一种基于区块链的时间戳生成系统,系统包括:
时间获取模块,用于获取本地节点时间,并接收至少一个其它节点传入的其它节点时间;
时间计算模块,用于根据其它节点时间以及本地节点时间计算结果时间;
时间戳设置模块,用于将结果时间设置为当前区块生成时的时间戳。
本申请所提供的基于区块链的时间戳生成系统,首先获取本地节点时间,并接收区块链节点传入的其它节点时间,进而进行其它节点时间以及本地节点时间综合之间的计算产生结果时间,最终将结果时间设置为当前区块生成时的时间戳。本系统在当区块链节点生成当前区块的时间戳时,同时参考其它区块链节点提供的其它节点时间以及本地节点时间,相对确保了时间戳的整体可靠性,进而确保了区块链系统的可用性。
此外,本申请还提供一种计算机可读存储介质,计算机可读存储介质上存储有基于区块链的时间戳生成程序,基于区块链的时间戳生成程序可被一个或者多个处理器执行,以实现如上述的基于区块链的时间戳生成方法。
本申请所提供的计算机可读存储介质,首先获取本地节点时间,并接收区块链节点传入的其它节点时间,进而进行其它节点时间以及本地节点时间综合之间的计算产生结果时间,最终将结果时间设置为当前区块生成时的时间戳。本计算机可读存储介质在当区块链节点生成当前区块的时间戳时,同时参考其它区块链节点提供的其它节点时间以及本地节点时间,相对确保了时间戳的整体可靠性,进而确保了区块链系统的可用性。
以上对本申请所提供的一种基于区块链的时间戳生成方法、装置、系统及存储介质进行了详细介绍。说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以对本申请进行若干改进和修饰,这些改进和修饰也落入本申请权利要求的保护范围内。
还需要说明的是,在本说明书中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。