红色块和蓝色块

分布式的网络非常复杂,有诚实做工的,也有恶意攻击的;有计算性能(包括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赞

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

感谢黄金哥~ :cherry_blossom:

1赞

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

good day, problem solved?

If you have some problem when using Kahf wallet, you can post the feedback in the category below:

https://test.qitmeertalk.org/c/kahf-feedback/feedback