本发明涉及区块链技术领域,更具体地说,涉及一种在区块链中自适应调整采样窗口的方法、计算机可读存储介质和区块链网络。
背景技术:
在区块链网络当中,经常需要对多份数据进行投票以保证数据的一致性,女巫攻击的发起者可以伪造多个身份,通过获得多数票而获得对最终数据的写入权。为了防止女巫攻击,很多情况下需要去中心化系统当中不同身份的节点在提交数据的同时提交工作量证明。许多著名的公链,例如:比特币,以太坊都采用了工作量证明的方式来防止女巫攻击,保证系统的安全性。
比特币的工作量证明算法,是每当系统产生2016个块之后,对过去产生的2016个区块的出块间隔和预期时间间隔进行调整,调整当前的出块的难度。具体公式如下:线性难度计算方法线性难度计算方法
预期单位出块时间(一周):tt=14*24*60*60;
预期一个块的出块时间(10分钟)ts=10*60
调整一次出块难度要经历的出块个数(2016):
每2016个块的第1个块的时间:tf;
每2016个块的最后一个块的时间:tl;
出块间隔:tas=tl-tf。
极端情况下,如果2016个块的出块间隔大于4周则按照4周来计算出块间隔,如果2016个块的出块间隔小于1/4周,则按照1/4周来计算出块间隔
因此,旧难度值:do;
新难度值=旧难度值*(2016个块实际出块时间/2016个块预期出块时间):
因此,现有的比特币的难度计算方式在算力稳定的时候可以很好的保证出块速度。但是存在明显的缺陷,即全网难度波动剧烈,例如突然增大或者突然降低的情况下,全网的出块速度将出现剧烈抖动,导致出块速度的稳定性难以保证;
技术实现要素:
本发明要解决的技术问题在于,针对现有技术的上述缺陷,提供一种在区块链中自适应调整采样窗口的方法、计算机可读存储介质和区块链网络,通过自适应调整采样窗口来增强区块链网络的适应性,可以有效避免全网难度突然增大或者突然降低带来的全网出块速度的剧烈抖动,进而保证整个区块链网络的健壮性和稳定性。
本发明解决其技术问题采用的一个技术方案是,构造一种在区块链中自适应调整采样窗口的方法,包括:
s1、基于全网高度h和采样窗口最大值nmax判定是否需要进行采样窗口调整,如果是,执行步骤s2,否则执行步骤s4;
s2、基于所述全网高度h、所述采样窗口最大值nmax、偏差计算采样区间a,再次判断需要进行采样窗口调整,如果是,执行步骤s3,否则执行步骤s4;
s3、基于所述全网高度h、所述采样窗口最大值nmax、偏差计算采样区间a、异常增大阀值为b、异常缩小阀值c计算采样窗口调整值n;
s4、将所述采样窗口最大值nmax作为采样窗口调整值n。
在本发明所述的在区块链中自适应调整采样窗口的方法中,所述步骤s2进一步包括:
s21、基于所述全网高度h、所述采样窗口最大值nmax取索引i=h-nmax;
s22、判断所述索引i和所述偏差计算采样区间a是否满足i-1<0||i-2<0||i-a<0||i-a-1<0||i-a-2<0,如果是,则直至步骤s4,否则执行步骤s3。
在本发明所述的在区块链中自适应调整采样窗口的方法中,所述步骤s3进一步包括:
s31、获取索引i=h-nmax;
s32、基于所述索引、所述偏差计算采样区间a中的时间戳列表ts,以及所述偏差计算采样区间a,计算第一中位数m1=med(ts[i],ts[i-1],ts[i-2])以及第二中位数m2=med(ts[i-a],ts[i-a-1],ts[i-a-2]);
s33、基于所述第一中位数m1、第二中位数m2、所述偏差计算采样区间a、所述异常增大阀值b、所述异常缩小阀值c是否满足:m1-m2>b||m1-m2<c,如果是执行步骤s34,否则执行步骤s4;
s34、取异常波动值为u=i-h+1+nmin,其中nmin为采样窗口最小值,并执行索引i++,再判定索引i是否大于所述全网高度h,如果是执行步骤s35,否则返回步骤s32;
s35、基于所述异常波动值为u和所述采样窗口最大值nmax计算所述采样窗口调整值n。
在本发明所述的在区块链中自适应调整采样窗口的方法中,在所述步骤s35中,选择所述采样窗口调整值n=min(nmax,u)。
在本发明所述的在区块链中自适应调整采样窗口的方法中,进一步包括:
s5、基于所述采样窗口调整值n选择n个采样区块,并获取所述采样区块的时间戳和难度,并基于所述时间戳和难度计算当前高度的区块所需的难度。
在本发明所述的在区块链中自适应调整采样窗口的方法中,所述步骤s4进一步包括:
s51、基于所述采样窗口调整值n选择n个采样区块,并获取所述采样区块的时间戳和难度d;
s52、按照所述时间戳的先后顺序进行降序排列以获得时间戳列表ts,取索引i=0,d0为采样区块的平均难度;
s53、计算难度
s54、判定索引是否满足i=n,如果是将dn+1作为当前高度的区块所需的难度,否则返回步骤s53。
本发明解决其技术问题采用的另一技术方案是,构造一种计算机可读存储介质,其上存储有计算机程序,所述程序被处理器执行时实现所述的在区块链中自适应调整采样窗口的方法。
本发明解决其技术问题采用的再一技术方案是,构造一种区块链网络,包括多个区块链节点,所述区块链节点上存储有计算机程序,所述程序被处理器执行时实现所述的在区块链中自适应调整采样窗口的方法。
实施本发明的在区块链中自适应调整采样窗口的方法、计算机可读存储介质和区块链网络,通过自适应调整采样窗口来增强区块链网络的适应性,可以有效避免全网难度突然增大或者突然降低带来的全网出块速度的剧烈抖动,进而保证整个区块链网络的健壮性和稳定性。进一步地,还可以基于获得的采样窗口根据指数移动平均数计算当前高度的区块所需的难度,能够预防明显的偏差,进一步保证整个区块链网络的健壮性和稳定性。
附图说明
下面将结合附图及实施例对本发明作进一步说明,附图中:
图1是本发明的在区块链中自适应调整采样窗口的方法的第一优选实施例的流程示意图;
图2是本发明的在区块链中自适应调整采样窗口的方法的第一优选实施例的流程示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本发明涉及一种在区块链中自适应调整采样窗口的方法,包括:s1、基于全网高度h和采样窗口最大值nmax判定是否需要进行采样窗口调整,如果是,执行步骤s2,否则执行步骤s4;s2、基于所述全网高度h、所述采样窗口最大值nmax、偏差计算采样区间a,再次判断需要进行采样窗口调整,如果是,执行步骤s3,否则执行步骤s4;s3、基于所述全网高度h、所述采样窗口最大值nmax、偏差计算采样区间a、异常增大阀值为b、异常缩小阀值c计算采样窗口调整值n;s4、将所述采样窗口最大值nmax作为采样窗口调整值n。本发明通过自适应调整采样窗口来增强区块链网络的适应性,可以有效避免全网难度突然增大或者突然降低带来的全网出块速度的剧烈抖动,进而保证整个区块链网络的健壮性和稳定性。进一步地,还可以基于获得的采样窗口计算当前高度的区块所需的难度,能够预防明显的偏差,进一步保证整个区块链网络的健壮性和稳定性。
本发明涉及在区块链系统当中采样数据并作出调整的算法,通过动态的采样最近一段时间的出块的间隔,来调整当前全网区块链的难度。通过自适应窗口调整来增强区块链网络的适应性,可以有效避免全网难度突然增大或者突然降低带来的全网出块速度的剧烈抖动。主要目的是稳定区块链网络性能,提高区块链网络性能的适应性。
首先将本发明的术语定义如下:
全网高度为h,其具体数值可以根据实际情况来进行定义,例如可以选择为1024;
预期出块时间为常量t,其具体数值可以根据实际情况来进行定义,例如可以选择t=120s;
采样窗口最大值为nmax,其具体数值可以根据实际情况来进行定义,例如可以选择t=120s;
采样窗口最小值为nmin其具体数值可以根据实际情况来进行定义,例如可以选择nmax=240;
取中位数的函数为med();
取最小值函数为min()
偏差计算采样区间为a,其具体数值可以根据实际情况来进行定义,例如可以选择a=20
异常增大阀值为b,其具体数值可以根据实际情况来进行定义,例如可以选择b=2.5
异常缩小阀值为c,其具体数值可以根据实际情况来进行定义,例如可以选择c=0.5
在偏差计算采样区间里面的时间戳列表为ts
异常偏差值为u
本领域技术人员知悉,上述取值范围可以根据实际需要选择其他数值,本发明不受其具体取值范围的限制。
在步骤s1中,基于全网高度h和采样窗口最大值nmax判定是否需要进行采样窗口调整,如果是,执行步骤s2,否则执行步骤s4。优选地,当全网高度h和采样窗口最大值nmax满足h>nmax时才可能进行采样窗口的自适应调整,否则直接知悉步骤s4,将所述采样窗口最大值nmax作为采样窗口调整值n。
在步骤s2中,基于所述全网高度h、所述采样窗口最大值nmax、偏差计算采样区间a,再次判断需要进行采样窗口调整,如果是,执行步骤s3,否则执行步骤s4。优选地,首先基于所述全网高度h、所述采样窗口最大值nmax取索引i=h-nmax;然后判断所述索引i和所述偏差计算采样区间a是否满足i-1<0||i-2<0||i-a<0||i-a-1<0||i-a-2<0,如果是,则直至步骤s4,否则执行步骤s3。
采用上述步骤s1-s2可以初步判断,是否发生异常波动,如果没有发生异常波动,那直接将所述采样窗口最大值nmax作为采样窗口调整值n,不需要进行采样窗口的自适应调整,只有在发生异常波动的时候,例如当出现全网的算力突然增大3倍或算力突然间减少1/3,则切换到更小的。自适应窗口的选择会根据过去一段时间里面的出块时间戳的波动来进行调整,如果有突发事件的话,会根据突发事件来进行采样窗口的自适应调整。
在步骤s3中,基于所述全网高度h、所述采样窗口最大值nmax、偏差计算采样区间a、异常增大阀值为b、异常缩小阀值c计算采样窗口调整值n。在本步骤中,优选的依次执行
1、首先获取索引i=h-nmax;
2、基于所述索引、所述偏差计算采样区间a中的时间戳列表ts,以及所述偏差计算采样区间a,计算第一中位数m1=med(ts[i],ts[i-1],ts[i-2])以及第二中位数m2=med(ts[i-a],ts[i-a-1],ts[i-a-2]);
3、基于所述第一中位数m1、第二中位数m2、所述偏差计算采样区间a、所述异常增大阀值b、所述异常缩小阀值c是否满足:m1-m2>b||m1-m2<c,如果是则说明出现了异常波动,需要进行自适应调节,如果不是,那说明没有发生异常波动,将所述采样窗口最大值nmax作为采样窗口调整值n。
4、在确定发生异常波动之后,取异常波动值为u=i-h+1+nmin,其中nmin为采样窗口最小值,并执行索引i++,再判定索引i是否大于所述全网高度h,如果是基于所述异常波动值为u和所述采样窗口最大值nmax计算所述采样窗口调整值n,即所述采样窗口调整值n=min(nmax,u)。如果发现i<h,那返回到步骤2,重新执行步骤2-4,直到获得的索引i大于所述全网高度h,然后将对应的异常波动值u和所述采样窗口最大值nmax取最小值来获取采样窗口调整值n,即所述采样窗口调整值n=min(nmax,u)。
实施本发明的在区块链中自适应调整采样窗口的方法,通过自适应调整采样窗口来增强区块链网络的适应性,可以有效避免全网难度突然增大或者突然降低带来的全网出块速度的剧烈抖动,进而保证整个区块链网络的健壮性和稳定性。
图2是本发明的在区块链中自适应调整采样窗口的方法的第一优选实施例的流程示意图。在图2所示的实施例中,其获取采样窗口调整值n的步骤s1-s4可以参照图1所示的实施例,在此就不再累述了。
在步骤s5中,基于所述采样窗口调整值n选择n个采样区块,并获取所述采样区块的时间戳和难度,并基于所述时间戳和难度计算当前高度的区块所需的难度。在步骤s5中,可以采用指数移动平均数来计算当前区块所需的难度,从而对全网难度进行调整。
在本发明的优选实施例中,具体步骤如下:
1、基于所述采样窗口调整值n选择n个采样区块,并获取所述采样区块的时间戳ts1,ts12,…,ts1n和难度d1,d2,…dn进行采样,获得时间戳集合和难度集合[ts1,ts2,…,tsn]和[d1,d2,…dn]。
2、按照所述时间戳的先后顺序进行降序排列以获得时间戳列表ts[ts1,ts2,…,tsn],基于难度d1,d2,…dn获得采样区块的平均难度d0。可以采用任何已知的平均或者加权算法计算该平均难度d0。
3、开始取索引i=0;
4、计算难度
5、判定索引是否满足i=n,如果是将dn+1作为当前高度的区块所需的难度,否则重复执行步骤4,直至i=n。
实施本发明的在区块链中自适应调整采样窗口的方法,通过自适应调整采样窗口来增强区块链网络的适应性,可以有效避免全网难度突然增大或者突然降低带来的全网出块速度的剧烈抖动,进而保证整个区块链网络的健壮性和稳定性。进一步地,还可以基于获得的采样窗口根据指数移动平均数计算当前高度的区块所需的难度,能够预防明显的偏差,进一步保证整个区块链网络的健壮性和稳定性。
本发明解决其技术问题采用的另一技术方案是,构造一种计算机可读存储介质,其上存储有计算机程序,所述程序被处理器执行时实现所述的在区块链中自适应调整采样窗口的方法。
本发明解决其技术问题采用的再一技术方案是,构造一种区块链网络,包括多个区块链节点,所述区块链节点上存储有计算机程序,所述程序被处理器执行时实现所述的在区块链中自适应调整采样窗口的方法。
实施本发明的计算机可读存储介质和区块链网络,通过自适应调整采样窗口来增强区块链网络的适应性,可以有效避免全网难度突然增大或者突然降低带来的全网出块速度的剧烈抖动,进而保证整个区块链网络的健壮性和稳定性。进一步地,还可以基于获得的采样窗口根据指数移动平均数计算当前高度的区块所需的难度,能够预防明显的偏差,进一步保证整个区块链网络的健壮性和稳定性。
因此,本发明可以通过硬件、软件或者软、硬件结合来实现。本发明可以在至少一个计算机系统中以集中方式实现,或者由分布在几个互连的计算机系统中的不同部分以分散方式实现。任何可以实现本发明方法的计算机系统或其它设备都是可适用的。常用软硬件的结合可以是安装有计算机程序的通用计算机系统,通过安装和执行程序控制计算机系统,使其按本发明方法运行。
本发明还可以通过计算机程序产品进行实施,程序包含能够实现本发明方法的全部特征,当其安装到计算机系统中时,可以实现本发明的方法。本文件中的计算机程序所指的是:可以采用任何程序语言、代码或符号编写的一组指令的任何表达式,该指令组使系统具有信息处理能力,以直接实现特定功能,或在进行下述一个或两个步骤之后实现特定功能:a)转换成其它语言、编码或符号;b)以不同的格式再现。
虽然本发明是通过具体实施例进行说明的,本领域技术人员应当明白,在不脱离本发明范围的情况下,还可以对本发明进行各种变换及等同替代。另外,针对特定情形或材料,可以对本发明做各种修改,而不脱离本发明的范围。因此,本发明不局限于所公开的具体实施例,而应当包括落入本发明权利要求范围内的全部实施方式。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。