我们想要扩容,能做的是要么把区块的尺寸变大,要么缩短出块时间,要么两个都变。我们先试试出块速度从10分钟改成半分钟。这下乱了,考卷还没有发完有些童鞋就做完开始拿下一套考卷做了。于是教室里的混乱场面一度无法控制:满地的做了一半的考卷,大家都在忙着收新来的考卷。这个参数的调整导致出现大量的孤块和分叉,不仅大量的网络算力被浪费了,而且更关键的是我们前边说的同步带来的安全模型也荡然无存了:每一套新的试卷,都没发给全班呢,就有一小簇童鞋做出来了。于是重新发下一套试卷。也就是说平均每个童鞋就只做了15秒的题,就得要么完成要么白做了。这个直接带来的结果就是只有一半的算力在做有用工作,另外一半在做错误的考卷。从网络攻击者的角度上看,如下图所示,TA其实只是在和一半的算力在拼,也就是说只要他的算力占全网络的33%,TA就有可能赢, 而不是我们平时所说的50%
Soteria : DAG系统区块大小和出块时间的通俗解析之一配图(2)
那我们再试试把区块大小增加到之前的二十倍,也就是也变成10分钟。同样的道理,每套卷子的页数多了, 发卷子的时间变长了,也就是传输的时间变长了,而做卷子的时间不变,也就是出块的速度不变,那最后教室里还是同样的混乱:仍然出现大量的孤块和分叉,以及造成了相似的算力浪费。于是我们可以看出来,只要传输速度和出块速度可比,系统一开始设计的很多特性都无法保证了,特别是安全性。这两个参数不可比的时候就可以了吗?比如把区块大小增加4倍,离20倍还挺远,可以吗? 然,也是不太行的。因为区块的大小变了,等于我在两套协议下工作,我更改的那一刻之前就有一大堆部署兼容等等的各种软件工程和社区的问题需要考虑和处理。这个是个非常荆棘的道路,我们找个机会在《StoteriaDAG和分叉的通俗解析》中仔细的科普。不管如何,大家现在应该明白了扩容这件事其实是这两个参数互相制约,互相作用之下的妥协结果。这个问题在DAG的环境下就更加有趣了。
包容之美
我们做BlockDAG,其中一个重要的目标其实就是扩容。我们前边讨论已经显见:扩容被一对互斥的参数制约。他们之所以在blockchain系统里表现的这么复杂,说到底还是网络同步和赢者通吃这两条原则导致的。试想,如果后排的童鞋收到卷子的时候,即使前排童鞋都做完了,已经要下一套试卷了,他们仍然坚持做完并且得到心仪的分数,这样没有喇嘛多的孤块儿和分叉,这将多么美好啊。BlockDAG就是解决了这个问题,矿工们可以并行的挖矿,不用担心别人挖出来新的区块之后,自己这个新块就没用了;而是全心全意的继续挖矿,并及时的把挖出来的区块广播出去。