【我的区块链之路】- DAG模型讲解及IOTA中的使用

【转载请标明出处】:https://blog.csdn.net/qq_25870633/article/details/82027506

在这里我们可能都已经知道了,区块链目前都面临着低TPS的问题;目前市面上有着很多解决方案,但都不是近乎完美,例如:EOS的超级节点,ETH的分片侧链技术,适用于小额交易的闪电网络DAGHashGraph等等;我们本次讨论的主人翁就是DAG (有向无环图)。那么什么是有向无环图呢?

如果一个有向图从任意顶点出发无法经过若干条边回到该点,那么这个图就是一个有向无环图 ;单从这句话中可能我们还是无法领会其中奥妙,那么我们来看下图:

你能从任意一个点沿着向量能回到该点算我输。。。。

                                                                【我的区块链之路】- DAG模型讲解及IOTA中的使用

用一句比较术语话来描述就是:DAG是一种使用拓扑排序(https://en.wikipedia.org/wiki/Topological_sorting)的有向图形数据结构。序列只能从早到晚。DAG常常用来解决与数据处理、调度、寻找最佳导航路线和数据压缩有关的问题。

由于工作证明(POW)系统,比特币区块链一直效率低下。区块无法同时创建。链接的存储结构允许整个网络上只有一条链。大约同时发生的所有交易/事务都保存在同一个区块中。矿工(miner)然后争夺区块验证。(比特币)大概每10分钟只创建一个区块。

有向无环图(以下简称DAG)打破了“区块”的概念,其中的每一笔交易跳过了等待打包入块的步骤,直接以单笔交易为单位计入链中;

在DAG中,没有区块的概念,他的组成单元是一笔笔的交易,每个单元记录的是单个用户的交易,这样就省去了打包出块的时间。验证手段则依赖于后一笔交易对前一笔交易的验证,换句话说,你要想进行一笔交易,就必须要验证前面的交易,具体验证几个交易,根据不同的规则来进行。这种验证手段,使得DAG可以异步并发的写入很多交易,并最终构成一种拓扑的树状结构,能够极大地提高扩展性。

                                                         【我的区块链之路】- DAG模型讲解及IOTA中的使用

DAG没有挖矿,没有区块,没有交易费。网络的安全和一致性并不在矿工、验证者和用户之间划分。网络用户验证许多旧的交易(通过工作证明来验证),目的是为了能够进行自己的交易。没人获得回报,也没人要支付交易费。因此,像比特币或以太坊网络中的矿工-集中化是不可能的。

与基于区块链的网络(用户数量增加后速度变慢)相比较,随着用户群不断庞大,DAG实际上变得更快。这是由于越来越多的用户导致验证时间更短(这样你的交易就越容易被其他人的交易所引用,所以你的交易被验证的时间就越短)。在DAG网络上交易需要的哈希能力较低,这也是促使新用户使用DAG的另一个诱因。

【存在的问题】如何控制网络宽度?

DAG网络中,每笔交易被确认,需要链接到已经在网络中存在的并且比较新的交易如果都选择网络中比较早的交易,会导致网络宽度过宽,新的交易难以得到确认。理想的状态是,新的交易发起时,选择网络中已经存在的并且比较新的交易做链接确认,这样网络的宽度保持在一定范围,能让新的交易有足够快的确认时间
 

【缺陷】:

1:交易时长不可控DAG的验证规则是后面的交易验证前面的交易,这就很容易出现最后的交易迟迟无法被验证的情况,尤其是在整个网络发展的初期节点数量比较少的情况下,造成交易时长无法预测。当然,解决方法也是有的,但是不管是见证人还是其他超级节点机制,都在一定程度上违背了去中心化。

 

2:不支持强一致性。DAG作为一种谣言传播算法,其异步通讯机制在提高了扩展性的同时也带来了一致性的不可控问题。区块链是同步操作的验证机制,能够保证较高的一致性。但是DAG作为异步操作,它不存在一个全局的排序机制,在运行智能合约时,这就很可能会出现节点间所存储的数据在运行一段时间以后出现偏差的情况。

 

3:安全性还没有得到大规模的验证。DAG技术并不新鲜,但是应用到去中心化账本领域确是近几年的事情。他没有像比特币那般经历过长达10年的安全验证。这是他目前大规模的部署DAPP的最大障碍。

 

DAG技术作为区块链的一个有益补充,其异步通讯机制在提高扩展性、缩短确认时间和降低支付费用方面优势明显,未来在去中心化技术领域将来也会有一席之地。但其安全性和一致性的问题也亟待解决。

IOTA及其DAG:

 

我们先来通过两张图对比下普通的DAG及IOTA的DAG:

图一:普通DAG

【我的区块链之路】- DAG模型讲解及IOTA中的使用

 

图二:IOTA的DAG (tangle)

【我的区块链之路】- DAG模型讲解及IOTA中的使用

从图中我们可以看出,使用者每发起一笔交易,必须验证之前的两笔交易。这很像让一个孤儿自己选择养父母。DAG是孤儿的世界,每笔交易天生是孤儿,但养父母不能随便乱选,他们必须根正苗红,否则孤儿自己就不会被下一代选为父母,不被选择意味着从此消失

如果一笔交易不被后来的交易所验证,它就会变成真正的孤儿,从此在账本里失去合法性。

【注意】iota中使用POW来校验交易的哦,交易发起者自己选择两笔合法交易,花2秒钟找出一个随机数,让“随机数+信息”的哈希值符合系统要求。

验证所需的工作量与前手交易权重成正比,交易权重相当于验证难度,难度越高验证时间越长。IOTA中,权重是以3为底的指数增长:3的1次方、3的2次方、3的3次方……被验证次数越多的交易权重越大。(就是说如果当前交易选择了越往前的2笔交易来做校验进行tangle一起做POW的话就会越难算出目标Hash,之所以这么做就是为了让最近的交易越容易得到校验,也是保证了网络宽度的一种做法);所以,如果你担心验证完两笔正确交易却没人来验证你,那这种担心是多余的,因为验证新鲜交易更容易,如果验证靠前的陈旧交易,工作量会指数级地翻上去:本来2秒钟能验证完的交易,现在要花2小时,何必?

另外,你可能会问,DAG下为什么不能只验证一笔交易,必须是两笔或两笔以上?

因为如果只往前验证一笔,网络会被大算力操控。算力强者很容易抬高交易权重,拉长尾巴,以堵死后面的验证通路,让随后的诚实交易不得不屈从大算力;可验太多交易又会耗时过长。所以,验两笔能兼顾安全和效率

于是,发起者一边提交自己的交易,一边验证别人的交易(验证它们的合法性,然后做微量的POW计算,把自己的交易与它们绑定),以此编织着一个去中心化网络。注意:这个网络不是缠结图,缠结图里的点是交易记录,而网络指参与交易的所有节点。

可是DAG下会不会发生双重支付呢?

会。下面我们来说一说为什么会:

假如我转你价值100万元的IOTA,你非常高兴,确认后把100万元货物交给我,但此时我心生歹念。我靠算力发起攻击,用一笔权重更大的交易验证合法交易之前的交易。【我来发起双花】

【我的区块链之路】- DAG模型讲解及IOTA中的使用

只要超过主体诚实的DAG,随后的交易都会接在我的DAG后面生长,这样我就赖掉之前的交易,白白从你手里拿走100万元的货。

关键问题是,我得汇聚多少算力才能实现双重支付?

需要全网34%的算力。

IOTA团队说,网络还没成熟,所以先找个协管员看场子,这名协管员就是一台名叫Coordinator的服务器。所有交易是否合法,暂时全由这位协管员拍板,拍板后告诉其他节点,该验证哪些交易。

官方说,2018年会撤下协管员,这也意味着,目前IOTA暂时并非一个去中心化的网络。可如果能确保账本安全,中心化并非不可行的方案。

而防止全网34%的算力攻击的一个办法是招募矿工,但由于IOTA无手续费,所有没有矿工会响应,与此同时,IOTA还面临着拒绝服务攻击的可能,就像不收物业费的小区,靠业主自治很难扫清不法份子,甚至扫不净地上的落叶。

包括IOTA团队在内,暂时没有人给出解决方案。当然,让人垂泪的棘手问题还不止这些。

IOTA中的交易确认:

如果验证你交易的其他交易越多,则你的交易的确定性越高。当达到一个临界值时,就认为这个交易被确定了,这和比特币6个区块确定交易状态的思想一致。简单来说,IOTA是把算力作为交易的一部分。只要你想加入这个网络,那必须先成为Mini版矿工,做出微量的POW贡献,也因此它是去中心化的。

IOTA的数字签名问题:

IOTA使用了自己开发的哈希算法curl,但是curl算法的哈希值极易发生碰撞,于是就能伪造数字签名。

IOTA的特点:

1、交易确认速度快

2、无需专用矿工,每个需要交易的节点都来承担 mini矿工为自己的节点打包tangle

3、每个需要交易的节点都贡献小部分算力来做POW去交易比自己交易靠前的最新的随机2笔交易

4、交易无需手续费,因为没有专有矿工节点了

5、目前还需要见证人节点,因为mini节点提供的POW是可以被全网34%算力攻破的

6、暂时还不支持智能合约

好了以上就是对DAG及IOTA的讲解