Warning: Trying to access array offset on value of type bool in /www/wwwroot/blockchain/wp-content/themes/Grace8.2/functions_suxingme.php on line 1208

Warning: Trying to access array offset on value of type bool in /www/wwwroot/blockchain/wp-content/themes/Grace8.2/functions_suxingme.php on line 1209

Warning: Trying to access array offset on value of type bool in /www/wwwroot/blockchain/wp-content/themes/Grace8.2/functions_suxingme.php on line 1210

Warning: Trying to access array offset on value of type bool in /www/wwwroot/blockchain/wp-content/themes/Grace8.2/functions_suxingme.php on line 1303

DAG

1篇文章
这一次我们介绍的区块链项目就是 IOTA,它的团队将 IOTA 定义为『次时代的无许可』分布式账本,无论是次时代(Next-Generation)还是无许可(Permissionless)在作者看来都没有什么意义,我们还是先来看一下它解决了什么问题,再来讨论它的价值。 IOTA 使用了基于 有向无环图(DAG) 设计的 Tangle,有别于传统的区块链项目,在 IOTA 或者说 Tangle 中,没有区块和链的概念,同时也没有矿工和用户之间的转账并且交易也不收取手续费;IOTA 使用的 Tangle 是我们今天想要介绍的主要内容。 Tangle Tangle 本质上就是一个有向无环图,所有由节点发出的交易最后都会成为图的一部分,也就是用于存储交易的分布式账本。所有的交易在发送时,都需要确认两笔之前的交易,交易的确认是通过『边』来表示的。 也就是说每一笔交易都为整个网络中交易的确认做出了贡献,新的交易能够降低历史交易被篡改的几率,这也是 IOTA 与其他区块链之间的主要区别之一。 在 DAG 中,分叉是无时无刻不在出现的;然而在其他区块链网络中,例如 Bitcoin,分叉只是整个网络中的节点暂时没有达成共识,网络中的节点最终会确定一条唯一的主链,IOTA 的 DAG 却没有单一主链的限制,这能够在理论上增加网络的吞吐量并降低响应时间。 Tip Selection 为了将交易加入到 Tangle 中,新的交易必须选择同意两个之前的交易;在通常情况下,它都会选择两个最近没有被同意的交易,也就是 tips,选择 tips 的方法叫做 tip selection algorithm。 尖端的选择过程就是从创世交易向尖端的随机遍历,只是不同的交易会拥有不同的权重,拥有较多权重或者较多交易索引的 tips 会被优先选择,也就是说新创建的交易会比老的交易更容易被选择。 然而所有的节点不是一定需要遵循上述推荐的尖端选择算法,但是该算法的设计就是让绝大多数的节点都遵循的,在这个前提下,其他的节点也会被激励地使用这种方式选择需要同意的交易。 共识 到目前为止我们简单介绍了 Tangle 网络以及交易是如何发出的,但是对于交易的确认以及 共识 是我们还没有解决的;在 Bitcoin 中,由于所有的交易都是附着在 Block 上的,所以区块的确认就代表区块中交易的确认: 存在的最长链就是网络中的主链,某个区块到主链末尾之间区块的个数就是确认数,这钟实现方式非常容易理解,也很简单高效;但是 IOTA 由于使用了 DAG 作为数据结构并且没有区块的概念,整个网络中的情况就变得非常复杂。 Tangle 为我们提供了两种不同的共识策略,一种是中心化的,另一种是去中心的方式;前者是使用一个 IOTA 基金会控制的节点,也就是调节者(Coordinator),它每两分钟会发出一个不包含任何价值的交易,我们称之为里程碑(milestone),这种中心化的策略非常简单,所有被里程碑链接的交易都是被确认的,反之就是未被确认的交易: 另一种分布式的方式并没有一定确认或者未确认的状态,与 Bitcoin 一样,它会给出某个交易在某个时刻被确认的概率,我们经常说 Bitcoin 需要等待 6 个区块确认,这是因为在 6 个区块确认后,支出方想要进行双重支付(double-spend)必须控制非常强大的算力,这种攻击在理论上是有一定概率会发生的,只是概率非常小并且代价会比较大而已,所以攻击者出于收益小于支出的原因不会去做。 在 Tangle 中,如果我们想要确认一个交易被确认的概率,可以通过执行 100 次尖端选择算法,这 100 次执行的过程中,有多少次引用了该交易,当前交易就有百分之多少的概率被确认,这个概率会随着时间的增加和网络的运行不断提高,但是在作者看来这种方式听起来非常的不靠谱,还有点可笑,不过确实是一种在 DAG 中计算某交易被确认的『可行』方法。 交易 作为一个区块链项目,交易应该是不可或缺的一部分,但是 IOTA 中的『交易』有一些不一样,一个 Transaction 既可以表示一次交易的一次 Input,也可以表示 Output,其实 Transaction 比较像 Bitcoin 中的 UTXO,而真正的交易在 IOTA 中名字叫做 Bundle,我们可以得到如下的对应关系: 在这篇文章中我们会分别使用 IOTA 中的术语,Transaction…

关注我们的公众号

微信公众号