一种难度调整的方法及相关设备与流程

文档序号:18406118发布日期:2019-08-10 00:24阅读:262来源:国知局
一种难度调整的方法及相关设备与流程

本申请涉及区块链领域,具体涉及一种难度调整的方法及相关设备。



背景技术:

区块链是对接入服务器的所有区块链节点公开的分布式存储的数据结构,包含着若干的区块(block),在开发时,一般以整个网络的计算力大致每10分钟产生一个区块所需要的难度数值为难度目标,整个网络通过难度这个变量控制生成工作量证明所需要的计算力。

由于在开发过程中,不同时间的算力不同,如果难度变量不变,或者变化的方向与算力变化的方向相反,比如当开发某一区块时,整个网络的算力低于开发上一区块的算力,但是难度却高于上一区块,就会带来反效果,常规的难度调整一般是,比特币网络每产生2016个区块(两周)后,会根据之前2016个区块的计算时间以及算力进行数学难题的难度调整,通过将数学解的阈值提高或降低来减少或增加难度,使每个区块的计算时间维持在大约10分钟的范围。但这是对一段较长时间内的平均算法,在具体的开发过程中,如果上一个区块的开发过程中存在某算力高的大厂,在开发下一区块时,该大厂如果撤出就会使得下一区块的开发时间大大增加,难度与算力并不能实时对应上是目前的难度调整方法存在的明显缺点。

申请内容

本申请实施例公开了一种难度调整的方法及相关设备,用于根据实时算力调整区块开发难度。

本申请第一方面提供一种难度调整的方法,应用于区块链设备,包括:

获取第一区块难度值以及第一区块出块时间;

根据所述第一区块难度值以及第一区块出块时间计算第二区块第一目标难度值;

获取实时算力以及系统算力;

计算所述实时算力以及所述系统算力的算力差;

根据算力差与pid算法公式输出难度调整参数;

根据所述第二区块第一目标难度值以及所述难度调整参数计算出第二区块第二目标难度值。

可选地,在根据所述第二区块第一目标难度值以及所述难度调整参数计算出第二区块第二目标难度值之后,所述方法还包括:

将所述系统算力的值更改为所述实时算力的值,以使得后一次的难度调整以前一次的难度调整为依据。

可选地,在根据所述第二区块第一目标难度值以及所述难度调整参数计算出第二区块第二目标难度值之后,所述方法还包括:

预设时间阈值;

判断距计算出第二区块第二目标难度值的时间是否满足所述时间阈值;

若满足所述时间阈值,则重新获取所述实时算力以及所述系统算力;

计算所述实时算力以及所述系统算力的算力差;

根据算力差与pid算法公式输出难度调整参数;

根据所述第二区块第一目标难度值以及所述难度调整参数计算出第二区块第二目标难度值。

可选地,在根据所述第二区块目标难度值以及所述难度调整参数计算出第二区块第二目标难度值之后,所述方法还包括:

若所述第二区块计算完成,则退出所述重新获取所述实时算力以及所述系统算力的循环过程。

可选地,所述第一区块难度值以及第一区块出块时间计算第二区块第一目标难度值使用的公式为:

d0≡131072

所述d为第二区块第一目标难度值,d0为一个常数,较为广泛地存在于以太坊的挖矿过程中,的计算方式也是以太坊本有的调整方式,-99是为调整上块区块的范围,p(h)u为叔块个数。

可选地,根据算力差与pid算法公式输出难度调整参数,所述pid算法公式为:

所述kp为比例增益,ki为积分增益,kd为微分增益,t为目前时间。

本申请第二方面提供了一种难度调整的系统,应用于区块链设备中,包括:

获取单元,用于获取第一区块难度值以及第一区块出块时间;

计算单元,用于根据所述第一区块难度值以及第一区块出块时间计算第二区块第一目标难度值;

所述获取单元,还用于获取实时算力以及系统算力;

所述计算单元,还用于计算所述实时算力以及所述系统算力的算力差;

输出单元,用于根据算力差与pid算法公式输出难度调整参数;

所述计算单元,还用于根据所述第二区块第一目标难度值以及所述难度调整参数计算出第二区块第二目标难度值。

可选地,所述系统还包括:

更改单元,用于将所述系统算力的值更改为所述实时算力的值,以使得后一次的难度调整以前一次的难度调整为依据。

可选地,所述系统还包括:

预设单元,用于预设时间阈值;

判断单元,用于判断距计算出第二区块第二目标难度值的时间是否满足所述时间阈值;

所述获取单元,还用于若满足所述时间阈值,则重新获取所述实时算力以及所述系统算力;

所述计算单元,还用于计算所述实时算力以及所述系统算力的算力差;

所述输出单元,还用于根据算力差与pid算法公式输出难度调整参数;

所述计算单元,还用于根据所述第二区块第一目标难度值以及所述难度调整参数计算出第二区块第二目标难度值。

可选地,所述系统还包括:

退出单元,用于若所述第二区块计算完成,则退出所述重新获取所述实时算力以及所述系统算力的循环过程。

本申请第三方面提供一种区块链设备,包括:

处理器、存储器、输入输出设备以及总线;

所述处理器、存储器、输入输出设备分别与所述总线相连;

所述处理器用于执行如前述实施例任一项所述的方法。

本申请第四方面提供一种计算机可读存储介质,其上存储有计算机程序,其特征在于:所述计算机程序被处理器执行时实现如前述实施例中任意一项所述方法的步骤。

从以上技术方案可以看出,本申请实施例具有以下优点:本实施例中,获取第一区块难度值以及第一区块出块时间,根据所述第一区块难度值以及第一区块出块时间得到第二区块第一目标难度值,获取实时算力以及系统算力,并计算所述实时算力以及所述系统算力的算力差,根据算力差与pid算法公式输出难度调整参数,根据所述第二区块目标难度值以及所述难度调整参数计算出第二区块第二目标难度值。其中,通过实时监测算力的变化,并根据算力的变化对应调整难度值,以使得难度与实时算力相匹配。

附图说明

图1为本申请实施例中一种难度调整的方法实施例的一个示意图;

图2为本申请实施例中一种难度调整的方法实施例的另一个示意图;

图3为本申请实施例中一种难度调整的方法实施例的另一个示意图;

图4为本申请实施例中一种难度调整的方法实施例的另一个示意图;

图5为本申请实施例中一种难度调整的系统实施例的一个示意图;

图6为本申请实施例中一种计算机装置的一个示意图。

具体实施方式

本申请实施例提供了一种难度调整的方法及相关设备,用于根据实时算力调整区块开发难度。

为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分的实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。

本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。

本申请涉及区块链技术,为了便于理解,下面将对在本申请实施例中的区块链(blockchain)进行简单的介绍,区块链是对接入服务器的所有区块链节点公开的分布式存储的数据结构,包含着若干的区块(block)。包含客户端的用户终端可以注册成为一个区块链节点,与接入区块链服务器的其他区块链节点组成p2p网络,区块链数据可以存放在p2p网络,p2p网络任何一个或多个区块链节点瘫痪,都不会导致区块链数据的丢失,这样区块链数据就具有很强的安全性,确保数据的永久保存和不可篡改。当一个区块持久化到区块链数据中时,接入服务器的区块链节点都可以添加该区块;区块是按照持久化时间顺序一个一个地添加到区块链数据中的,除了区块链数据中第一个区块外的每一个区块都要链接到其前一个区块,这样区块链数据就形成一个区块链接这一个区块了,就像一个链条一样,当一个区块被持久化到区块链数据后,该区块就无法被修改了。

区块难度是用来衡量挖出一个区块平均所需要的运算次数,反映了在一定难度下用多长时间才能挖到一定数量的区块,也是矿工挖矿时重要的参考指标。数据区块产生的难易程度是由难度值(difficulty)来衡量的,我们也可以将difficulty简单的理解为挖到数据区块所用的时间。现有的区块难度调整方案,在矿工开始挖取新的区块时即确定了目标难度值,这样会导致如下几个问题:若此时整个系统中大型矿池掉线,全网算力骤然降低,此时的目标难度值对于整个系统现在的状态来说偏大,导致矿工们长时间挖不出新的区块,系统阻塞较长时间;若此时有大型矿厂新加入网络后,由于该矿厂拥有相比当前系统较大的算力,该矿厂会在较短的时间挖出新的区块,获取丰厚区块奖励,之后退出网络,待系统难度渐渐下降到合适水平时再次加入,会导致该矿厂用较少的能源消耗获取较多的矿工奖励,而本申请则旨在提出一个可以根据算力的改变实时改变难度值的方案。

为了便于理解,下面对本申请实施例中的具体流程进行描述,请参阅图1,本申请实施例中难度调整的方法的一个实施例包括:

101、获取第一区块难度值以及第一区块出块时间;

具体地,由于区块链的挖矿过程是不可逆且每一个步骤都会被记录的,所以在具体的某个区块的挖掘过程中,会以上一区块的难度值与出块时间为参考,该第一区块指的即为正在计算的区块的上一区块,由于该第一区块已经开发完成,所以第一区块的难度值以及出块时间都是一个定值,用来计算出下一的要开发的区块的目标难度值。

102、根据所述第一区块难度值以及第一区块出块时间计算第二区块第一目标难度值;

具体地,获取了第一区块的难度值与出块时间后,会根据已有的以太坊难度调整公式计算出第二区块,也就是第一区块的下一个区块的目标难度值,由于本申请旨在提出一个根据实时算力的变化从而调整难度的方法,在较短时间内的算力差较小,所以本方案中的调整公式不存在该难度调整公式的难度炸弹系数,如下:

d0≡131072

其中,d为要计算的第二区块的第一目标难度值,该第一目标难度值也就是说根据上一区块的难度值以及区块时间,得出的第二区块的较为理想的难度值,d0为目标难度值可以取的最小值,该值为一个常数,较为广泛地存在于以太坊的挖矿过程中,的计算方式也是以太坊本有的调整方式,-99是为调整上块区块的范围,p(h)u表示的为叔块个数,其中,叔块的意思是叔块就是跟自己的父区块指向的父区块相同。

103、获取实时算力以及系统算力;

具体地,当得出了当前区块的目标难度值也就是第二区块的目标难度值的时候,由于算力是存在可能会出现偏差等情况的,比如,某个大型矿场掉线了,会导致当前全网的算力降低较大,如果维持在建立在上一区块也就是第一区块的数据上计算的难度值,那么当前区块的挖矿时间就会变长,如果开发当前区块时,某个具有高算力的矿场上线,那么会使得当前区块的挖矿时间变短,而这两种情况都会使得当前区块的开发变得不公平,所以,就会获取实时算力以及系统算力,实时算力的计算方法主要是距上一区块开发后,所完成的总的哈希计算的次数除以对应消耗的时间,系统算力,则是如果想在10分钟完成一个区块的开发的话,对应第二区块的目标难度值所需要的算力。

实时算力的计算公式:

ct=完成hash次数/所耗时耗

其中,ct为实时算力。

104、计算所述实时算力以及所述系统算力的算力差;

具体地,如前述实施例所说的,如果突然发生大型矿场掉线或上线的情况,均会使得实时算力与系统算力的差距变大,计算公式为:

e=ct-c

其中,ct为实时算力,c为系统算力,e为算力差。

105、根据算力差与pid算法公式输出难度调整参数;

具体地,通过算力差e可以知道当前算力和区块链系统的算力差,以此为依据,进行目标难度调整。如果大型矿厂掉线,则当前算力比系统算力小,算力差e为负值,得到的难度调整参数u(t)也为负值。由于在该系统中三个增益参数均为非负值,结合pid算法公式的数学性质可知,当掉线的矿厂算力越大,得到的u(t)的绝对值也越大,可以达到快速减少误差的目的,在区块链系统中表现为目标难度快速降低,以让小算力的矿工可以挖出该区块,不至于阻塞整个系统。反之亦如此,如果由大型矿厂加入系统,则当前算力比系统算力大,算力差e为正值,得到的难度调整参数u(t)也为正值。由于pid公式未改变,同样表现为矿厂算力越大,得到的u(t)也越大,可以达到快速减少误差的目的。

难度调整参数u(t)的计算公式如下:

kp为比例增益,ki为积分增益,kd为微分增益,t为目前时间。

其中,pid算法公式为本申请输出难度调整参数的主要公式,主要起快速修正误差,维持系统稳定的作用,pid控制是一种控制方法,其最大的优点是不需要了解被控对象精确的数学模型,进行复杂的理论计算,通过工程方法对kp为比例增益,ki为积分增益,kd为微分增益,就可以得到令人满意的控制效果。

106、根据所述第二区块第一目标难度值以及所述难度调整参数计算出第二区块第二目标难度值。

具体地,第二区块的第二目标难度值为难度调整参数u(t)与第二区块第一目标难度值d相加,可以理解为,第二目标难度值,为算力发生变化后,更新的目标难度值。

本实施例中,获取第一区块难度值以及第一区块出块时间,根据所述第一区块难度值以及第一区块出块时间得到第二区块第一目标难度值,获取实时算力以及系统算力,并计算所述实时算力以及所述系统算力的算力差,根据算力差与pid算法公式输出难度调整参数,根据所述第二区块目标难度值以及所述难度调整参数计算出第二区块第二目标难度值。其中,通过实时监测算力的变化,并根据算力的变化对应调整难度值,以使得难度与实时算力相匹配。

基于图1所述实施例,本申请对单次难度调整过程后的步骤进行进一步的介绍,具体请参见图2,本申请实施例中一种难度调整的方法的另一个实施例包括:

201、将所述系统算力的值更改为所述实时算力的值,以使得后一次的难度调整以前一次的难度调整为依据。

具体地,由于难度调整是一直存在于以太坊的挖矿过程即区块的开发过程中的,也就是说,如果刚结束了一个难度调整的过程,那么在该难度调整的过程中,如前述实施例所说,就会存在一个实时算力与一个系统算力,该实时算力为在该次难度调整过程中根据哈希计算与消耗时间得出的最新数据,该系统算力,则是根据该次难度调整之前的难度值计算出来的较为理想的完成当前挖矿过程的算力,而当该次难度调整的过程结束之后,该实时算力就会替代系统算力,成为下一次难度调整过程中的新的系统算力,以使得在整个以太坊的挖矿过程是环环相扣的,难度调整也是存在依据的。

基于图2所述实施例,本申请对单次难度调整过程后的步骤进行进一步的介绍,具体请参见图3,本申请实施例中一种难度调整的方法的另一个实施例包括:

301、预设时间阈值;

具体地,由于难度调整存在于整个以太坊挖矿的过程中,那么就需要设置一个个的时间节点去触发,即时间阈值的作用,表示如果距上次难度调整结束的时间达到了该阈值,则触发下一次的难度调整的过程。

302、判断距计算出第二区块第二目标难度值的时间是否满足所述时间阈值;

具体地,在一次难度调整过程结束后,会实时地判断时间距离上次难度调整结束的时间是否满足了预设的时间阈值,若满足了该阈值,则开始下一次难度调整的过程。

303、若满足所述时间阈值,则重新获取所述实时算力以及所述系统算力;

304、计算所述实时算力以及所述系统算力的算力差;

305、根据算力差与pid算法公式输出难度调整参数;

306、根据所述第二区块第一目标难度值以及所述难度调整参数计算出第二区块第二目标难度值。

实施例303-306的作用以及有益效果与实施例103-106大致相同,此处不再进行赘述,但需要指出的是,如实施例201中所述的实时算力替代系统算力成为新的系统算力的过程,根据算力变化所计算出的第二区块第二目标难度值,在进行下一次的难度调整过程中,就会变成新的第二区块第一目标难度值,再进行如上述实施例所述的计算过程。

基于图3所述实施例,本申请对如何退出某次难度调整的循环过程,具体请参见图4,本申请实施例中一种难度调整的方法的另一个实施例包括:

401、若所述第二区块计算完成,则退出所述重新获取所述实时算力以及所述系统算力的循环过程。

具体地,若所述第二区块计算完成,则退出所述重新获取所述实时算力以及所述系统算力的循环过程指的就是,如果第二区块的挖矿结束了,也就是说已经得出了满足了当前区块要求的哈希值,那么就会退出当前难度调整的过程,而使得结束时的难度值,作为如实施例101所述的第一区块难度值出现在下一区块的难度调整过程中。

上面对本申请实施例中的方法部分进行了介绍,下面从虚拟装置的角度对本申请实施例进行说明。

请参阅图5,本申请实施例中一种难度调整的系统的一个实施例包括:

获取单元501,用于获取第一区块难度值以及第一区块出块时间;

计算单元502,用于根据所述第一区块难度值以及第一区块出块时间计算第二区块第一目标难度值;

所述获取单元501,还用于获取实时算力以及系统算力;

所述计算单元502,还用于计算所述实时算力以及所述系统算力的算力差;

输出单元503,用于根据算力差与pid算法公式输出难度调整参数;

所述计算单元502,还用于根据所述第二区块第一目标难度值以及所述难度调整参数计算出第二区块第二目标难度值。

作为一个优选实施例,所述系统还包括:

更改单元504,用于将所述系统算力的值更改为所述实时算力的值,以使得后一次的难度调整以前一次的难度调整为依据。

作为一个优选实施例,所述系统还包括:

预设单元505,用于预设时间阈值;

判断单元506,用于判断距计算出第二区块第二目标难度值的时间是否满足所述时间阈值;

所述获取单元501,还用于若满足所述时间阈值,则重新获取所述实时算力以及所述系统算力;

所述计算单元502,还用于计算所述实时算力以及所述系统算力的算力差;

所述输出单元503,还用于根据算力差与pid算法公式输出难度调整参数;

所述计算单元502,还用于根据所述第二区块第一目标难度值以及所述难度调整参数计算出第二区块第二目标难度值。

作为一个优选实施例,所述系统还包括:

退出单元507,用于若所述第二区块计算完成,则退出所述重新获取所述实时算力以及所述系统算力的循环过程。

本实施例中,获取单元501,用于获取第一区块难度值以及第一区块出块时间,计算单元502,用于根据所述第一区块难度值以及第一区块出块时间计算第二区块第一目标难度值,所述获取单元501,还用于获取实时算力以及系统算力,所述计算单元502,还用于计算所述实时算力以及所述系统算力的算力差,输出单元503,用于根据算力差与pid算法公式输出难度调整参数,所述计算单元502,还用于根据所述第二区块第一目标难度值以及所述难度调整参数计算出第二区块第二目标难度值。其中,通过实时监测算力的变化,并根据算力的变化对应调整难度值,以使得难度与实时算力相匹配。

下面从实体装置的角度对本申请实施例中的计算机装置进行描述,请参阅图6,本申请实施例中计算机装置的一个实施例包括:

该计算机装置600可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上中央处理器(centralprocessingunits,cpu)601(例如,一个或一个以上处理器)和存储器605,该存储器605中存储有一个或一个以上的应用程序或数据。

其中,存储器605可以是易失性存储或持久存储。存储在存储器605的程序可以包括一个或一个以上模块,每个模块可以包括对服务器中的一系列指令操作。更进一步地,中央处理器601可以设置为与存储器605通信,在智能终端600上执行存储器605中的一系列指令操作。

该计算机装置600还可以包括一个或一个以上电源602,一个或一个以上有线或无线网络接口603,一个或一个以上输入输出接口604,和/或,一个或一个以上操作系统,例如windowsservertm,macosxtm,unixtm,linuxtm,freebsdtm等等。

可以理解的是,在本申请的各种实施例中,上述各步骤的序号的大小并不意味着执行顺序的先后,各步骤的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以记录在一个计算机可读取记录介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品记录在一个记录介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的记录介质包括:u盘、移动硬盘、只读记录器(rom,read-onlymemory)、随机存取记录器(ram,randomaccessmemory)、磁碟或者光盘等各种可以记录程序代码的介质。

以上所述,以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1