DAG

作者:maxdeath
链接:https://www.zhihu.com/question/61572544/answer/189068136
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

DAG是个比特币的扩容方案,要理解这个就要知道比特币为啥要扩容,以及扩容的问题在哪。

为啥要扩容——10分钟1MB太慢了。

问题在哪——如果简单粗暴地提高区块大小,例如一个区块加到100M,由于网速的限制会导致很多节点还没有收到或者下载完新区块呢下一个区块就被挖出来了,结果就是全网的不一致性提高(大家不在同一条链上挖矿),然后在同一条链上挖矿的算力降低,于是可靠性降低。好理解的方法是,假设一个100M的区块传遍一半的网络需要10分钟,而一半的网络10分钟可以产生一个区块,那么实际上网络里最长的链上,永远都只有一半的算力,因为另外一半的算力还没听到这条链没来得及去挖的时候,这条链已经多了一个新区块了。

我们从攻击者的角度讲——原来你要和全网所有其他算力竞争,现在,你只要打赢一半算力就能进行51%攻击了。也就是说,假设你有34%的算力,你只在自己的链上挖矿,而其他的节点由于网络有延迟所以总是达不成一致,老是分成两个叉,每个叉上只有33%的算力,结果就是你只用了34%的算力产生的链就比其他节点产生的要长了。

DAG的解决方案是,将最长链共识改成最重链共识。每个挖出来的区块,不仅仅连在之前的一个区块上,而是之前它听到的所有区块上。放在之前的例子里,就是假设一半算力挖了个区块出来,他看到了网络里有两个分叉,都有效,于是它把区块同时连到这两个上面说这两个都是有效的区块,然后,同一层的算力都统计到一起。久而久之,这个链就不再是链了,而是一个DAG。然后,如果你拥有34%的算力还想进行攻击,诚实节点会看到你的链和另外一个DAG,虽然一样长,但是你的链上每层都只有一个块,而这个DAG上每层有两个块,于是这个DAG更重,然后按照规则,不选链而选DAG。

总而言之,DAG的好处就是即便增加区块大小或者区块频率造成网络里产生大量分叉,然而攻击者还是需要51%的算力才能进行攻击。

然后缺点是,首先同时产生两个有效区块并不是说交易量就翻倍了,因为里面可能有大量交易是重复的,而且这些交易都存在链里会造成冗余。

其次,如果两个有效区块里有个交易双重支付了怎么办?必须有个复杂的机制来判别两个交易哪个有效

猜你喜欢

转载自blog.csdn.net/weixin_41598126/article/details/80159382
DAG