一种区块链DAG宽度的控制方法与系统
技术领域
本发明涉及面向物联网的去中心共识技术领域,更具体地说,涉及一种区块链DAG(有向无环图)宽度的控制方法与系统。
背景技术
去中心化的物联网能够就地部署和交换价值,类似区块链的技术是一种潜在的解决办法。然而,普通区块链技术与物联网的结合会遇到一些挑战:分布式共识机制可确保数据的最终一致性,但比特币的工作量证明机制(PoW)资源消耗太大,显然不适用于部署在物联网节点中。其次,以太坊等区块链2.0技术也是PoW+PoS,正逐步切换到PoS。在性能瓶颈方面,传统比特币的交易是7笔/秒,每十分钟才出一个块,经6个出块确认后,需要约1个小时才写入区块链,以太坊好很多,但是出块速度也需要十几秒。这种时延引起的反馈时延、报警时延,在时延敏感的工业互联网上不可行。可见,现有的区块链为代表的无中心可信价值网络不适合物联网,不可能直接把现有的区块链技术原封不动地应用到物联网的应用当中。
区块链网络数据结构创建了一组无信任的参与节点(设备),它们共享一个公共账本数据库,没有中间人参与。为了防止分布式环境的混乱,每个数据库交易应该遵循像比特币中的最长链规则(LCR)这样的预定规则。如果没有这个规则,区块链的单独副本将会分成不同的分叉。除了传统的比特币区块链数据结构之外,还有其他三种可能的区块链变体:侧链,离线链和替代链。闪电网络属于其中的离线链,离线交易记录有时同步或广播到主链的本地分类账上,它通过建立点对点的支付渠道使比特币的小额支付成为可能。闪电网络提高了比特币的可扩展性,但不能有效的减少资源消耗,提高交易性能,不适用于物联网。
相比于区块链数据结构的变体,Nxt社区第一次提出DAG跟区块链结合,改变区块的链式存储结构,变成区块DAG。在区块打包时间不变的情况下,网络中可以并行的打包N个区块,网络中的交易就可以容纳N倍。这个时候DAG跟区块链的结合还是停留在侧链的思路,不同类型的交易可以并行在不同的链条进行,达到提升性能的目的。但BlockDAG不适用于轻量级的物联网。
2015年Dagcoin被提出,Dagcoin是一种基于DAG结构的加密货币技术,它将交易和块的概念融合在一起,使每个用户成为矿工,认证数据结构是交易的有向无环图(Transaction Directed Acyclic Graph,TDAG)。TDAG在速度和可扩展性上都要优于区块链或BlockDAG,更适用于应用到物联网中。
2016年IOTA Tangle和Byteball相继发布,它们采用的数据结构都是TDAG。不过,Tangle仍然使用工作量证明机制(PoW),而Byteball使用主链来完成交易的总排序,引入见证人的机制,并不适用于物联网。
在采用基于无区块的DAG技术的共识和账本数据组织方法时,DAG的宽度即DAG结构的剪切面,当前DAG的宽度是指当前未被验证过的交易数。当DAG的宽度比较大时,一些交易也许需要等待较长时间才能得到第一次验证,故需要控制DAG宽度,提高交易确认速度。
发明内容
本发明要解决的技术问题在于,针对现有的当DAG的宽度比较大时,一些交易也许需要等待较长时间才能得到第一次验证,故需要控制DAG宽度,提高交易确认速度的技术缺陷,提供一种区块链DAG宽度的控制方法与系统。
根据本发明的其中一方面,本发明解决其技术问题所采用的技术方案是:构造一种区块链DAG宽度的控制方法,对于某一笔交易x当前的累积权重为Hx,所述区块链DAG宽度的控制方法具体包括如下步骤:
(1)、过滤得到累计权重在L和2L之间的所有交易,L为预设值;
(2)、随机选择过滤后交易中的N个交易,N为预设值;
(3)、让所述N个交易进行独立的离散时间随机行走,这个行走是朝向tips的,行走的基本规则是:当且仅当交易y能够验证交易x,就可以从x转到y;随机行走的转移概率按如下方式定义:如果交易y验证交易x:记作y→x,那么转移概率Pxy为:
其中Hy、Hz分别表示交易y、z的当前的累积权重,γ≥1,设置γ的值是可变的,当Hx小于某一固定值时,将γ的值更新为一个更小的值;
(4)、选择一个固定的参数α∈(0,1),得到先到达tips的αN个随机行走,选取其对应的tips;
(5)、选择一个固定的参数β∈(0,1),然后对步骤(4)的αN个tips基于交易积分排序,选取最前βαN个tips,即为最终要进行验证的tips;
其中αN、βαN均进行取整处理。
进一步地,在本发明的区块链DAG宽度的控制方法中,L为根据当前网络结构的大小决定,L的设定要使L和2L之间的交易有足够的深度。
进一步地,在本发明的区块链DAG宽度的控制方法中,N取值范围为[15,25]。
进一步地,在本发明的区块链DAG宽度的控制方法中,在步骤(3)中,所述某一固定值为L/10;所述将γ的值更新为一个更小的值是指更新为γ/2,或者比γ/2更小的数。
进一步地,在本发明的区块链DAG宽度的控制方法中,所述进行取整处理包括:进行四舍五入、舍弃小数点后的数据以及去不大于要处理数据的最大正整数。
根据本发明的另一方面,本发明为解决其技术问题,还提供了一种区块链DAG宽度的控制系统,对于某一笔交易x当前的累积权重为Hx,所述区块链DAG宽度的控制系统具体包括如下模块:
交易过滤模块,用于过滤得到累计权重在L和2L之间的所有交易,L为预设值;
交易选择模块,用于随机选择过滤后交易中的N个交易,N为预设值;
随机行走模块,用于让所述N个交易进行独立的离散时间随机行走,这个行走是朝向tips的,行走的基本规则是:当且仅当交易y能够验证交易x,就可以从x转到y;随机行走的转移概率按如下方式定义:如果交易y验证交易x:记作y→x,那么转移概率Pxy为:
其中Hy、Hz分别表示交易y、z的当前的累积权重,γ≥1,设置γ的值是可变的,当Hx小于某一固定值时,将γ的值更新为一个更小的值;
初步选取模块,用于选择一个固定的参数α∈(0,1),得到先到达tips的αN个随机行走,选取其对应的tips;
最终选取模块,用于选择一个固定的参数β∈(0,1),然后对初步选取模块的αN个tips基于交易积分排序,选取最前βαN个tips,即为最终要进行验证的tips;
其中αN、βαN均进行取整处理。
进一步地,在本发明的区块链DAG宽度的控制系统中,L为根据当前网络结构的大小决定,L的设定要使L和2L之间的交易有足够的深度。
进一步地,在本发明的区块链DAG宽度的控制系统中,N取值范围为[15,25]。
进一步地,在本发明的区块链DAG宽度的控制系统中,在随机行走模块中,所述某一固定值为L/10;所述将γ的值更新为一个更小的值是指更新为γ/2,或者比γ/2更小的数。
进一步地,在本发明的区块链DAG宽度的控制系统中,所述进行取整处理为:进行四舍五入、舍弃小数点后的数据以及取不大于要处理数据的最大正整数中的任意一种。
实施本发明的区块链DAG宽度的控制方法及系统,具有以下有益效果:在利用基于无区块的有向无环图技术的共识和账本数据组织方法是,本发明对DAG的宽度进行控制,提高了交易确认速度。
附图说明
下面将结合附图及实施例对本发明作进一步说明,附图中:
图1是本发明的账本数据结构的示意图;
图2是本发明的交易的数据结构的示意图;
图3是本发明的双花避免以及DAG宽度的控制方法的流程图;
图4是本发明的双花解决方案的示意图;
图5(a)、图5(b)分别是本发明的DAG宽度控制的示意图。
具体实施方式
为了对本发明的技术特征、目的和效果有更加清楚的理解,现对照附图详细说明本发明的具体实施方式。
本发明采用的技术方案是:利用无区块的有向无环图技术设计账本结构和共识机制,并提出控制该DAG结构宽度的算法,提高交易的确认速度,实现面向物联网的轻量级去中心共识系统。具体设计如下:
(1)账本数据结构:舍弃传统区块链中区块的概念,不再采用先将很多笔交易打包到区块中,区块与区块之间通过哈希指针来维护全网交易顺序的方式,而是将区块和交易融合在一起,每一笔交易无区块直接上链。账本采用有向无环图结构,即形成交易的有向无环图,同时,每笔交易须验证一个或多个以前的交易。如果交易A到交易B有一条长度至少为2的有向路径存在,则称交易A间接验证了交易B。
在账本数据结构中,交易的权重与发送这笔交易的节点所投入的工作量成正比,可以将其固定为常数1。交易的累积权重为这笔交易的权重与其他直接或间接验证这笔交易的所有交易的权重之和,也可以理解为该交易的累计工作量证明。交易的积分为这笔交易的权重与所有它直接或间接验证的那些交易的权重之和。Tips定义为端点,即未被验证过的交易。交易的深度定义为自这笔交易到某个tip的最长路径。交易的验证数定义为一笔交易所直接验证的交易数目(即节点的出度)。
参考图1,图中方框表示的是交易,方框下的数字为交易序号,方框里的a/b表示该笔交易的累积权重为a,积分为b,交易是按从左到右的时间顺序排列的,箭头表示验证交易。每笔交易的权重定为1,以交易10为例,它直接验证了交易7,间接验证了交易1和4,故它的积分是4。交易13、14和15直接验证了它,交易16和17间接验证了它,故它的累积权重是6。
(2)交易结构:参考图2,交易的数据结构包括:
A1交易头:包括:该笔交易的哈希值、该笔交易验证的一笔或多笔交易的哈希值所构成的表、用于工作量证明算法的难度目标、用于工作量证明算法的计数器Nonce。
A2交易信息:包括:该笔交易的大小、交易输入的数量、交易输出的数量、交易时间。
A3交易输入:之前某笔交易的哈希值,交易发起者的签名。
A4交易输出:输出金额,包含交易地址的输出脚本。
(3)共识机制:网络中的每个节点都可以发起和验证交易,当节点发起一笔交易时,必须验证之前的一个或多个交易。具体步骤如下:
(3.1)创建交易信息,验证若干个先前的交易,若验证通过,则引用它们,否则,寻找其他的先前交易直至验证通过。
(3.2)构造交易头,将被验证的交易的哈希值构造成表,放到交易头中。
(3.3)构建完整交易,做pow,将该交易发布到网络,放进DAG结构中。
(3.4)每当新的交易加入DAG结构后,部分先前的交易的累积工作量证明会增加,每个交易会验证若干个先前的交易,并形成自己的验证路径,最后,随着更多的新交易加入DAG结构,变会形成一个完整的协同验证。某笔交易在DAG结构中越来越深,累积工作量证明越来越大,确认性越来越高,当每一笔新的交易的验证路径上都会有该笔交易时,可认为该笔交易已经得到全网的共识,想要改变该笔交易须投入大量的工作量证明,难以实现。
步骤(3.1)中验证过程包括对pow的检查,交易输入中签名的检查,验证路径上不存在冲突的交易。
步骤(3.3)中节点做pow类似于解决比特币区块链的密码难题,寻找一个随机数Nonce,使交易头的哈希值小于难度目标,这种小的工作量证明可作为应对垃圾信息的保护。
(4)双花避免算法:为避免攻击者发起的双花交易对系统稳定性的影响,采用IOTA的tips选择策略来避免双花,并对tips选择策略进行改进,使其更适用于本系统。
IOTA有3种tips选择策略:随机选择、基于积分的选择策略和基于累积权重的选择策略。
本算法在选择tips时将积分和累积权重都考虑到,算法的核心思想是使用MCMC(马尔科夫蒙特卡洛)算法筛选tips,并在这些tips中选择积分高的那些。
参考图3,假设某一笔交易x当前的累积权重为Hx,具体算法描述如下:
(4.1)、过滤得到累计权重在L和2L之间的所有交易,L为预设值(其中L是一个很大的数,根据当前网络结构的大小决定,L的设定要使L和2L之间的交易有足够的深度),L为预设值;
(4.2)、随机选择过滤后交易中的N个交易,N为预设值(N不用很大,一般取值在[15,25]之间即可);
(4.3)、让N个交易进行独立的离散时间随机行走,这个行走是朝向tips的,行走的基本规则是:当且仅当交易y能够验证交易x,就可以从x转到y;随机行走的转移概率按如下方式定义:如果交易y验证交易x(记作y→x),那么转移概率Pxy是正比于exp(-γ(Hx-Hy))的,也就是
其中γ>0是一个待选取的预设参数,可以从γ=1开始。
(4.4)、选择一个固定的参数α∈(0,1),得到先到达tips的αN个随机行走,选取其对应的tips;
(4.5)、选择一个固定的参数β∈(0,1),然后对步骤(4.4)的αN个tips基于交易积分排序,选取最前βαN个tips,即为最终要进行验证的tips。
其中αN、βαN均进行取整处理,如:进行四舍五入、舍弃小数点后的数据以及去不大于要处理数据的最大正整数。
在选择交易进行验证时,若验证路径上存在冲突交易,一个简单的方法是比较两笔交易的累积权重,选择累积权重大的那笔交易。然后,重新选择其他的tips,直到不存在冲突的交易。该方法虽然速度快,但并不稳定,可采用另外一种方法:多次运行tips选择算法,并查看两个交易中的哪一个更有可能被所选tips直接或间接验证,则认为那笔交易是合法的。
参考图4,图中交易A和交易B是冲突交易,交易E是一笔新的交易,它选择了交易C和交易D进行验证,在其验证过程中会发现冲突。交易A的累积权重是6,交易B的累积权重是5,所以交易A的累积权重较大,可以简单的认为交易A是合法的。也可以在目前的账本结构下多次运行tips选择算法,并查看两个交易中的哪一个更有可能被所选tips直接或间接验证,则认为那笔交易是合法的。
(5)控制DAG宽度的策略:
DAG的宽度即DAG结构的剪切面,当前DAG的宽度是指当前未被验证过的交易数。当DAG的宽度比较大时,一些交易也许需要等待较长时间才能得到第一次验证。故需要控制DAG宽度,提高交易确认速度。
DAG宽度较大的一个重要原因是相同的交易被反复确认,这里存在两种情况,一种是交易故意去选择较早的已经被确认的交易,从而避免进行交易的验证,如图5(a)所示,图中交易A、交易B和交易C选择了较早的已经被确认的交易,从而避免了交易的验证,这使得DAG的宽度增大。另一种情况是节点遵循相同的tips选择算法(非随机tips选择算法),则这些新的交易所验证的交易大致是相同的,如图5(b)所示,图中新的交易采用了相同的tips选择算法(非随机tips选择算法),故它们所验证的交易集中在了交易A和交易B上,而留下了一些其它的tips未验证,使得DAG的宽度增大。这是由于计算和网络延迟,每笔交易在到达账本后,都会有一段时间不可见,这个延迟时间表示交易通过网络准备和传播所花费的时间,故节点是基于账本过去的某个状态来选择tips的。
对于第一种情况,可以使用基于积分或累积权重的tips选择算法,避免使用纯随机的选择算法。
对于第二种情况,可以改进tips选择算法,增加一点随机性。
方案一:设置γ的值是可变的,当Hx小于某一固定值时(比如L/10),将γ的值减为γ/2或其它比较小的值。这样,在开始时深度较大,随机行走确定性高,而当接近于tips的时候,随机行走会更分散一些,因此也就有足够的随机性来选择交易进行验证。
方案二:系统可根据当前网络的计算能力,网络拥塞状况和交易流量,定期设置宽度的阈值。当宽度到达阈值时,鼓励节点使用随机性大的tips选择算法,而不是全部都用基于累积权重和积分的算法,因为后者相较于前者要求的时间和计算资源较大。通过这样可以在短时间内快速确认交易,使DAG变薄。
上面结合附图对本发明的实施例进行了描述,但是本发明并不局限于上述的具体实施方式,上述的具体实施方式仅仅是示意性的,而不是限制性的,本领域的普通技术人员在本发明的启示下,在不脱离本发明宗旨和权利要求所保护的范围情况下,还可做出很多形式,这些均属于本发明的保护之内。