红色块和蓝色块

分布式的网络非常复杂,有诚实做工的,也有恶意攻击的;有计算性能(包括CPU,GPU,网络等)优越的,也有性能普通的;有矿工,也有普通节点;有出故障的,也有正常的;当然也不排除程序的BUG导致同步问题。所以网络永远不能保证100%的节点达成共识,只能保证绝大多数节点能够达成共识即可。

按照区块为1M的标准尺寸来说,一般15秒以内区块可以传遍绝大多数节点。对于新生网络,由于区块交易较少,加上节点分布较为集中,15秒更是几乎足够可以传遍所有节点。但是总有例外的情况,像我刚刚列举的情况都有可能造成节点没有在15秒内同步区块,我们把这些没有同步的区块统称为失效区块。也就是红色区块了,其他的正常的区块自然就是蓝色区块了。

由于DAG是采取先打包后验证的策略,所以即使是失效区块,在刚发布到网络时,也会被网络先接受。等经过一段时间有足够多的确认后,再来判断哪些是有效的区块,哪些是失效的区块。

技术上判断是否失效,我们可以先思考下,正常情况下,账本的形态。我们假设区块最大传播时间为D秒,在时间t时我挖出了一个块儿B, 则D秒之前的区块我是肯定可以看到, D秒之后的区块肯定也能看到我的这个块儿。体现在账本上就是我这个区块会确认所有D秒之前的区块,然后D秒之后的区块肯定也都会确认我的区块。我们称D秒之前的和D秒之后的区块为B的相关区块。

但是,t-D到t+D之间产生的区块就有可能没有确认B或者没被B确认,这些区块相对于B而言都是未知的。我们称这些区块为无关区块。我们统计无关区块的极限值就估算出极限并发量,极限并发量就是无关区块极限值+1, 这里+1是指我也挖出了区块,也属于并发的一部分。

DAGfans上有个计算无关区块极限值的小工具,我们带入测试网络的数据,给大家一个比较直观的感受

这个工具有三个参数:出块率,安全等级,区块传播时间。 区块传播时间是区块传播到全网的最大时间,为了保证容错能力,我们尽量会加大,这里采用默认值15;安全等级是指,有多大概率一个诚实的区块会被判定为无效区块,即红色区块,这里采用默认值%1,或者也可以理解为网络的容错能力;出块率就是每秒产生的区块数,比如说比特币10分钟一个区块,每秒就是1/600个块儿

安全等级和传播时间可以认为是网络的物理属性,可以是经验值或者测算出来的,可以认为是常量,但是出块率是网络的参数,可以根据网络运营的需要调整。值得注意的是,对于区块链而言,这个参数也可以认为是常量,是不能随意调整的,因为这个参数跟安全性相关,设置得越小网络越安全,这就是比特币为什么要设置称十分钟一个块儿的原因。但是BlockDAG的安全性跟出块率是无关的,只要没有造成网络拥堵,这个值理论是没有上限的。Qitmeer 设置成相对保守,更多的还是出于经济模型设计的考虑或者账本膨胀的考虑,等各方面都准备OK了,是可以设置得很高的。

言归正传,我们分别用两次测试的参数跑一下, 首先看30秒,即出块率为1/30

~/github.com/forchain/AnticoneSize (master*) $ ./AnticoneSize -rate 0.03333333333
_delay:15 _rate:0.03333333333  _security:0.01 expect:0.9999999999 coef:0.3678794412082303

k=0 sum=0.6321205587917698
k=1 sum=0.2642411176203274
k=2 sum=0.08030139705300021
k=3 sum=0.01898815687002247
k=4 sum=0.0036598468258108655

可以看到,无关区块超过4个块儿的概率只有0.366%,超过1个块儿的概率只有26.42%,即大多数情况下,要么就是一条链,要么就只有一个侧链区块。

再来看看15秒,即出块率为1/15

~/github.com/forchain/AnticoneSize (master*) $ ./AnticoneSize -rate 0.06666666667
_delay:15 _rate:0.06666666667  _security:0.01 expect:2.0000000001 coef:0.13533528322307917

k=0 sum=0.8646647167769208
k=1 sum=0.593994150317229
k=2 sum=0.3233235838440036
k=3 sum=0.14287653951949766
k=4 sum=0.05265301735273352
k=5 sum=0.01656360848422339
k=6 sum=0.004533805527451858

可以看到,无关区块超过6个块儿的概率只有0.45%,超过2个块儿的概率只有32.33%,即绝大多数情况下,我们可以看到不多于二个区块的侧链。

至于k这个无关极限值与红色区块判定关系就是,我们以15秒为例,正常情况下某个区块最多只能有6个无关区块,但是这个区块的极限值超过了6。有可能是运气成分,其他节点挖出了超过6个区块,且都与该区块无关,当然更大的可能性是该矿工网络状况不好,没能在一个传播周期内把区块传播给全网。

1 Like

不过即使被标记为红色区块也不必太沮丧,DAG跟区块链不一样,区块链一旦标记为过时区块(stale block)则矿工收不到任何收益。但是Qitmeer的BlockDAG,出块奖励和交易奖励是分开的,只要保证交易是最早被区块打包,则交易费是会给的,这样即使网络状况不是太好,只要积极地为网络服务,还是有些补偿地。未来随着挖矿难度地提升,交易费的价值也是很客观的。

感谢黄金哥~ :cherry_blossom:

1 Like

Good day.i have not been able download the khaf wallet from the website