从区块链到DAG(五)--DAG项目介绍IOTA和Obyte

原文链接:《从区块链到DAG(五)--DAG项目介绍IOTA和Obyte》

作为系列的最后一篇文章,我们简单的介绍两个DAG的代表项目:IOTA和Obyte。这里主要着眼于他们的账本共识是怎么实现的以及有什么不足之处。

 1. IOTA 

IOTA被认为是第一个也是最出名的一个用DAG结构的项目,它主要着眼于解决物联网发展中的小额支付问题。以比特币为例,每次支付不管数额大小多要产生交易费,而且矿工要消耗大量的资源完成区块的打包和记账;IOTA直接取消了打包区块的这个过程(DAG图中的每个顶点不是区块而是一笔笔的交易),没有了区块打包也就没有矿工,所以整个交易是不需要手续费的。 

1.1 共识机制简介

IOTA发明了Tangle协议专门针对这种特殊的账本形式。Tangle中的每一笔新产生的交易需要引用之前的两笔交易来验证确认:这意味着一个交易都可以向前到创世单元,向后可以直接或间接的被tip引用(图片1的阴影方块为tip,代表还没被验证过的交易)。所以一个攻击者想修改某个单元就得欺骗所有直接和间接与这个单元相关的交易随着时间的推移,这个单元被越来越多的交易引用,所以攻击的难度也就越来越大

图片1 一个典型的IOTA网络

来源:Serguei Popov, The Tangle

Tangle中引入了累计权重的概念:每个交易有个自身权重,自身权重的大小与记录这笔交易的节点所投入的工作量成正比,记为3n(n属于非零整数)。而把直接和间接引用这个交易的其他交易(即直接和间接指向这个交易的未来交易)自身权重相加后再加这个交易自己的自身权重就能得到这个交易的累计权重,见图片2。

图片2 一个DAG网络在产生新的交易X后的累计权重的变化

来源;Serguei Popov, The Tangle

在图2中,每个方块单元代表一笔交易,方块右下角的小数字代表每个交易的自身权重,较大的加粗数字代表累计权重。以交易F为例,F由交易B, E直接引用,A, C间接引用;所以F的累计权重为F(9)=B(3)+E(1)+F(3)+C(1)+A(1)。当一笔新的交易X进入网络且引用了交易A和C来验证,这导致每个交易的累计权重会相应增加3(X的自身权重)。一笔交易的累计权重越大,说明这笔交易就被越多的交易引用验证过,这笔交易的可靠性就越高。我们发现自身权重是不会变的,累计权重会随着网络中交易的增加而增大。为了简化讨论,在后文的讨论中我们都假设所有交易的自身权重都为1,这样累计权重的计算简化为:累计权重=直接引用的交易个数+间接引用的交易个数+1(交易的自身权重)

如果tip是随机引用两笔交易来确认,那么一些懒惰的单元会引用一些比较旧的交易,如图3。这样做会使一些tip的确认速度变慢,甚至部分tip会一直孤旋在外无法确认,网络的运行效率会降低。为了避免这种情况共识规定累计权重越高的交易越有可能被选中确认,如图4。

图片3 有偷懒交易的IOTA网络

来源:The Tangle: an Illustrated Introduction--Part 3: Cumulative weights and weighted random walks, https://blog.iota.org/the-tangle-an-illustrated-introduction-f359b8b2ec80

图中灰色单元是还没确认的tip。14作为一个懒惰单元忽略了最新的交易点而直接用较旧的交易1和3来确认。

图片4 累加权重如何避免偷懒交易

来源:The Tangle: an Illustrated Introduction--Part 3: Cumulative weights and weighted random walks, https://blog.iota.org/the-tangle-an-illustrated-introduction-f359b8b2ec80

图片4中,当下已经被验证确认过的交易用红色表示,要引用这些红色交易来验证的交易标记为蓝色。假设16是一个懒惰节点,在随机引用的规则下16会引用交易7来验证。但是在加入累计权重打分后,7这个单元面临两条路径:16的累计权重为1(直接和间接引用的交易个数都为0);9的累计权重为7(直接和间接引用的交易为10~15一共6个,再加1得7);因此选中9的概率远远大于选中7的概率。由此可知累计权重的引入可以有效的减少懒惰节点。

1.2 项目的不足之处

从上文的介绍可以看出,Tangle本身是完全去中心化的,累计权重的概念与PHANTOM协议中的连通度有着异曲同工之妙,本质上都是认为诚实交易倾向于与其他诚实交易互联。IOTA在保证了高并发的同时也有着不容忽视的问题:

1. 一份麻省理工DCI实验室的报告指出项目自己开发的哈希函数curl容易被碰撞破解,造成数字签名的伪造。而项目的联合创始人Sergey Ivancheglo居然声称curl的缺陷是故意的,是为了防止别的项目复制代码。这种难以置信的说辞简直是对开源社区的侮辱,难免使人对项目团队产生负面印象。

2. 由于一个tip要引用两笔交易,所以一旦有人掌握34%的算力就可以篡改账本。这远远低于比特币51%算力的作恶门槛,网络的安全性不如传统的区块链项目。

3. 项目现在依赖一个中心化的节点Coordinator来检查全网防止“双花”。Coordinator某种意义上相当于网络中的全节点,项目方承诺在未来交易活跃以后会移除这个节点。但是在没有矿工激励的前提下如何鼓励更多的节点参与进来使交易活跃?未来会用一个什么样的去中心化方案来代替Coordinator?针对这些问题目前没有一个很好的解答。

4. IOTA的共识做不到完全排序,因此IOTA是不支持智能合约的。项目方计划通过预言机外包智能合约,从官网的路线图上看这部分工作还在POC(proof of concept)的论证阶段。

 2. Obyte 

Obyte原名Byteball,它的目的是开发一种DAG结构的分布式数据库,它可以对标数字资产、产权、股权,债权等。与IOTA一样,Obyte取消了“区块”这一概念并由此获得了高并发的交易处理能力,不同之处是Obytel的交易是需要手续费的。

2.1 共识机制简介

Obyte的账本共识是一个全序共识,通过见证人的参与选出一个主链从而可以对全网的交易进行排序。得益于这个共识的时序性,Obyte无需借助额外的组件就可以避免“双花”问题,也能提供智能合约服务。

Obyte网络中从tip出发沿着最优父单元回溯到创世单元的路径就是主链。单元(交易)B引用一个先前产生的单元A,则单元A是单元B的父单元,单元B是单元A的子单元。最优父单元的选择算法里引入了以下两个概念:

单元级别:当前单元到创世单元的最长路径长度。

见证级别:从当前单元通过父单元沿主链回溯并分别统计认证每个单元的见证人个数,当某一单元包含大多数见证人时停止回溯。记录这个停止位置的单元级别,该单元单元级别就是当前位置的见证级别。

然后我们通过三点来筛选最优父单元:

1. 具有更高见证级别的父单元是“最优父单元”。

2. 如果多个父单元有相同的见证级别,选择单元级别最低的作为“最优父单元”。

3. 如果仍有多个父单元见证级别和单元级别都相同,则选择具有最小哈希值的父单元。

总体来看,不同的tip对应主链有可能不同,这些主链统称为候选主链,而具有更高见证级别的候选主链会被认为更“真实”从而成为稳定主链,如图5。所有侯选主链都会在稳定点收敛,表现形式是这些候选主链会在稳定点交叉,稳定点和创世单元之间只有唯一一条路径稳定主链,已经加入稳定主链的单元是无法被篡改的,所以稳定主链就是最终确定的账本。在选定了主链之后我们开始给链上的每个单元排序,这个序号叫主链序号MCI(Main Chain Index)。创世单元为0,主链上的其他单元一次加1;不在主链上的单元序号与主链上首次包含(直接或间接)该单元的主链序号一致。当出现两个相互矛盾的交易时(“双花”交易),我们考虑两种情况:

1. 这两个交易本就有一个单元直接或间接包含另一个单元的情况,理所当然的后一个单元不会被承认。

2. 两个单元之间没有直接关联,如图5。在选定主链完成全序排列后,具有较小主链序号的单元5被认为是有效的,较大的单元6为无效。

图片5 Obyte的网络分析

来源:ByteBall原理解析(二)共识算法, https://bbfans.org/2018/05/21/byteball-consensus-algorithm/

可以看出,这个账本的排序依赖最佳父单元的选择,而最佳父单元的选择又依赖于这些交易单元是否被足够多的见证人认证过。见证人相当于我们熟知的全节点,每个单元被多少见证人验证过相当于判断每个单元全网广播时被多少全节点确认过,参与确认的全节点越多则这单元越可靠。随着加入网络的单元越来越多,稳定点可以通过一系列见证级别和单元级别的运算向后推进,这使得稳定主链随着时间的推移变长,被最终确认的交易也越来越多。这部分计算我们在此不做展开,大致的判断原则是:如果一些候选主链单元的见证级别大于当前标定单元的单元级别,则稳定点向后推移。目的是为了保证加入稳定主链的候选主链一定有最高的见证级别,换句话说依照最新的见证人列表被大部分见证人认可的单元才能加入。 

2.2 项目的不足之处

1. 见证人只有12个,而且要求是网络中一些实名的信誉良好的个人或企业。这一点类似DPOS,依然是高度中心化的一种方案。

2. 理论上说DAG的账本结构、取消区块打包的流程和只有12个见证人的全节点数量应该会使Obyte有超高的交易速度,但实际上Obyte的吞吐量远远小于一般的DAG网络。创始Tony Churyunoff认为是程序中大量的SQL操作影响了网络的性能。 

 3. 总结 

结合这两个项目和我们之前介绍的SPECTRE与PHANTOM协议,我们会发现在DAG中,最难的就是账本共识的全序列排序。IOTA到目前为止还没解决这个问题,甚至连“双花”都需要一个“看场子”的Coordinator来兜底;Obyte的排序算法本身没有问题,但是确定主链的过程去中心化程度太低。DAG最初作为一种区块链layer1的扩容方案被提出来,伴随着网络结构的复杂,与区块链相比这种账本结构所需的共识难度也成倍的增加,所以DAG的项目数量远远少于区块链的项目。最近一年几个关注度高的区块链扩容主打的方案还是以layer2的为主,比如分片,侧链等。可是这些方案又不得不额外解决不同链(不分组)间的通信问题。所以我想最终的解决方案很可能是layer1的底层网络结构和layer2方案的一种结合,DAG的研究将会有助于我们找到答案。

参考资料:

[1] Serguei Popov, The Tangle, April 30, 2018. Version 1.4.3

[2] The Tangle: an Illustrated Introduction, https://blog.iota.org/the-tangle-an-illustrated-introduction-4d5eae6fe8d4

[3] The Tangle: an Illustrated Introduction--Part 2: transaction rates, latency, and random walks, https://blog.iota.org/the-tangle-an-illustrated-introduction-c0a86f994445

[4] The Tangle: an Illustrated Introduction--Part 3: Cumulative weights and weighted random walks, https://blog.iota.org/the-tangle-an-illustrated-introduction-f359b8b2ec80

[5] IOTA Roadmap, https://roadmap.iota.org/

[6] 深入了解IOTA, https://zhuanlan.zhihu.com/p/43518955

[7] Obyte developer resource, https://developer.obyte.org/contracts

[8] ByteBall目前存在的一些问题及改进方向, https://bbfans.org/2018/08/25/byteball-flaws-and-future-direction/

[9] ByteBall原理解析(一)DAG数学基础及ByteBall的结构, https://bbfans.org/2018/05/21/byteball-principle-dag-struct/

[9] ByteBall原理解析(二)共识算法, https://bbfans.org/2018/05/21/byteball-consensus-algorithm/

[10] 关于ByteBall中见证级别(witnessed level)的深入讨论, https://bbfans.org/2018/11/09/byteball-witnessed-level/

[11] Antonn Churyumov, Byteball: A Decentralized System for Storage and Transfer of Value

————  e n d ————

历史文章

希望大家可以关注微信公众号更加方便交流。公众号的文章也会率先更新~

猜你喜欢

转载自blog.csdn.net/NewBlockChain/article/details/107425570
DAG