zoukankan      html  css  js  c++  java
  • 有向无环图 (DAG) 技术:超越区块链的分布式账本

    一、起源

    DAG(Directed Acyclic Graph,有向无环图)是一种数据结构,最早提出在区块链中加入DAG概念作为算法,是在2013年的bitcointalk论坛,被称作为“Ghost协议”,这一提议也是为了解决当时比特币的扩容问题。后来,在NXT社区,又有人提出了DAG of block,将DAG的拓扑结构用来存储区块,解决效率问题。那时对于DAG的应用,还停留在类似于侧链的一个认识。

    DAG

    众所周知,扩展性是当前区块链技术急需解决的难点之一。谈到扩展性,首当其冲的便是区块链的扩容问题,当区块链上的交易频繁时,区块链的性能也呈会线性下滑。参考以太坊的容量,仅仅一个加密猫游戏就让区块链不堪重负,造成了巨大拥堵。所以,如何有效地扩容,成为了当下区块链技术的一大重点。

    在PoW算法的区块链中尤其如此,由于PoW机制是将交易数据打包成区块,在由算力高的节点进行记账,这种算法相对于PoS速度较慢,交易量上升更加会影响到整体的确认速度,以比特币为例,一开始比特币区块链大小为1M,后来交易量的上升使得社区不得不考虑扩容方案,还因此引发了扩容之争与分叉事件。

    PoS在确认速度上大为改善,但仍然难以跟上需求。

    同时,PoW和PoS算法都有趋向于中心化的理论风险,当拥有的算力或者代币达到了一定数量时,区块链就会变得中心化。

    DAG也是一种分布式账本技术,与区块链不同。因为区块链是由区块组成的一条单链,而DAG则是由交易组成的网络。但本质上,两者却有着很大的相似之处。DAG中的交易,就可以看做是一个个“区块”,只不过这些区块也可以作为节点,形成一个复杂交织的网络拓扑结构。

    DAG与PoW、PoS相比,DAG有着更加高的性能,甚至可以说交易越多、节点越多,处理速度越快。

    二、工作原理

    DAG技术如何在作为一个分布式账本进行应用呢?IOTA是应用DAG技术较为知名的一个项目,它将DAG进行了改进,并提出Tangle(缠结)方案。这里以IOTA作为例子来说明DAG的运行原理。

    在DAG的网络中,每一个节点都可以是交易者和验证者,因为DAG中的交易处理,正是由交易节点本身来共同完成。

    而且,IOTA的Tangle账本在保证高速处理交易的同时,并不需要支付交易费用。不过,这并不代表上面的交易时免费的,这是因为在这个账本中,每一笔交易的发起都需要线验证另外两笔随机交易,并将自己发起的交易指向这两笔交易,这样在区块链上矿工所承担的责任就分配给了所有的交易者。

    DAG这种处理交易的方式,可称作为异步处理模式。

    Tangle账本是建立在DAG网络拓扑结构上的去中心化账本,利用这一结构,所有点都能成为“矿工”,而且每个节点所承担的交易数量并不会超负荷,这样就使得交易量越大效率越高。

    如果像IOTA一样,将其运用于微小交易,那么可参与的节点将会更多。区块链承担的交易量每秒可以万计算,而理论上DAG却能够达到每秒以亿计算。

    三、优缺点

    DAG的优点非常明显,它没有区块链需要担忧的扩容问题,因为随着交易量和用户的增长,它的处理速度只会更加快速;同时无交易费这一点可以迅速提升交易量,增强去中心化。

    更强的性能和更高程度的去中心化,是DAG领先于区块链,以及重大创新的部分。然而,DAG也有着很大的隐患。

    在安全性上,DAG要比PoW脆弱得多。在PoW共识机制中,算力达到51%,才能够发起攻击;而攻击DAG,以Tangle为例,发起一笔交易验证两笔交易,理论上来说,只要达到34%的算力,就能够攻击整个DAG网络了。

    而且,因为每个人都能处理交易,如果一个拥有高算力的节点通过发起巨量的交易,从而获得更多验证权,就很容易降低DAG网络的效率,甚至发起攻击;而无交易费使得发起和验证的成本为零,同时海量的节点更增加了这种攻击风险。

    此外,在掌握高算力的情况下,也很容易出现“双花”现象,“双花”即双重花费,指一笔钱花了两次。攻击者可以同时发起两笔交易,利用异步处理数据和节点间的信息差来达到这个目的。

    DAG作为区块链的一个有力竞争者,有着极大的创新之处,但同时也具有明显的缺陷。不过,作为一个年轻的数据结构,DAG可以结合更多的新技术来扬长避短。目前使用这一技术的项目,有知名的“DAG三驾马车”IOTA、字节雪球、NANO。

    目前,有越来越多的DAG项目正在发展,有乐观者认为DAG才是真正的区块链3.0,也有人认为区块链才是更加完善的去中心化账本。不可否认的是,DAG的确是区块链在去中心化和拓展问题上的强劲对手。

     

  • 相关阅读:
    Unity多线程(Thread)和主线程(MainThread)交互使用类——Loom工具分享
    一种Unity2D多分辨率屏幕适配方案
    Unity 2D骨骼动画2:创建真实动画
    Unity2d 骨骼动画1:介绍
    Unity2d 骨骼动画3:介绍Mecanim和脚本
    Unity2D研究院之自动生成动画、AnimationController、Prefab(一)
    mongochef如何链接有权限的mongodb3.x数据库
    moogodb3.x总结
    mongodb3.x用户角色
    MongoDB 基础 -安全性-(权限操作)
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13313525.html
Copyright © 2011-2022 走看看