『壹』 有谁知道能解释一下有向无环图(DAG)么怎么用程序做出来,及怎么应用到经济学实证上
我们说区块链目前还不成熟,有各种各样的问题,比如说处理速度慢、手续费高昂、存在安全隐患等等,这些都是用户最直观的体验,体验不是太好。区块链还有一个问题,那就是高并发问题。
高并发问题是怎么回事呢,我们简单说一下。高并发是计算机领域的问题,简单来讲,高并发问题就是系统无法顺利同时运行多个任务。
很多任务同时运行,一大堆用户涌进来,系统承受不住这么多的任务,会出现高并发问题,你的系统就卡住了,就好比春运时候,12306系统总是卡住,有可能就是高并发问题造成的。
传统互联网尚且存在高并发问题,区块链网络自然也存在这个问题,毕竟区块链的成熟程度比起传统互联网,还有很大的差距。但是,如果没有安全、可靠和高效的公链,整个区块链产业的发展都将受到严重制约,应用落地也是空谈。
在这种背景下,DAG 技术就被提出来了,DAG 的全称是“Directed Acyclic Graph”,中文翻译为“有向无环图”。
DAG有向无环图是怎么回事呢,它到底能起到什么作用呢?我们下面解释一下。
一、DAG:一个新型的数据结构
DAG,中文名字叫“有向无环图”,从字面意思看,“有向"就是说它是有方向的,
“无环”就是说它是没有环路的、不能形成闭环的。所以,DAG其实是一种新型的数据结构,这个数据结构是有方向的,同时又是不能形成闭环的。
传统区块来讲,我们总是以“区块”为单位,一个区块里往往包含了多笔交易信息。而在DAG中,没有区块的概念,而是以“单元”为单位,每个单元记录的是单个用户的交易,组成的单元不是区块,而是一笔笔的交易,这样一来,可以省去打包出块的时间。
简单来说,区块链和DAG有向无环图最大的区别就是:区块链是一个接一个的区块来存储和验证交易的分布式账本,而DAG则是把每笔交易都看成一个区块,每一笔交易都可以链接到多个先前的交易来进行验证。
二、DAG 的工作原理
传统区块链上,就拿比特币来讲,它是单链式的结构,区块与区块之间按照时间戳的先后顺序排列开来(如图一),数据记录在一条主链上。用不太恰当的比喻来讲,这个
“单链式”结构是一条一字排列的链。
区块链只有一条单链,打包出块就无法并发执行。新的区块会加入到原先的最长链之上,所有节点都以最长链为准,继续按照时间戳的顺序无限蔓延下去。而对于DAG来讲,每个新加入的单元,不仅只加入到最长链的一个单元,还要加入到之前所有的单元(如图二)。
举个例子:假设我发布了一个新的交易,此时DAG结构已经有2个有效的交易单元,那么我的交易单元会主动同时链接到前面的2个之中,去验证并确认,直到链接到创世单元,而且,上一个单元的哈希会包含到自己的单元里面。
换句话说,你要想进行一笔交易,就必须要验证前面的交易,具体验证几个交易,根据不同的规则来进行。这种验证手段,使得DAG可以异步并发的写入很多交易,并最终构成一种拓扑的树状结构,极大地提高扩展性。
依据DAG有向无环图,每一笔交易都直接参与了维护全网。当交易发起后,直接广播全网,跳过矿工打包区块阶段,这样就省去了打包交易出块的时间,提升了区块链处理交易的效率。
随着时间递增,所有交易的区块链相互连接,形成图状结构,如果要更改数据,那就不仅仅是几个区块的问题了,而是整个区块图的数据更改。DAG这个模式相比来说,要进行的复杂度更高,更难以被更改。
总结一下,DAG作为一种新型的去中心化数据结构,它属于广义区块链的一种,具备去中心化的属性,但是二者的不同之处在于:
区块链组成单元是Block(区块),DAG组成单元是TX(交易)。
区块链是单线程,DAG是多线程。
区块链所有交易记录记在同一个区块中,DAG每笔交易单独记录在每笔交易中。
区块链需要矿工,DAG不需要矿工。
三、 DAG 的代表:IOTA
DAG当前的代表项目,最知名的无疑就是 IOTA。可以说,正是因为IOTA这个币种在 2017年下半年冲进市值排行第四位,才使人们真正认识到了它的底层技术:DAG有向无环图。
IOTA在DAG有向无环图的基础上提出了“缠结”概念,在IOTA里面,没有区块的概念,共识的最小单位是交易。每一个交易都会引用过去的两条交易记录哈希,这样前一交易会证明过去两条交易的合法性,间接证明之前所有交易的合法性。这样一来, 就不再需要传统区块链中的矿工这样少量节点来验证交易、打包区块,从而提升效率,节省交易费用。
四、 DAG 的现状
尽管理论上来讲,DAG有向无环图能够弥补传统区块链的一些弊端,但是目前并不成熟,应用到数字货币领域的时间也比较短,还比较年轻 。
它没有像比特币那般经过长达10年的时间来验证整个系统的安全性,也没有像以太坊那般实现了广泛的应用场景。不过,现在有些声音提出要采用“传统区块链+DAG”的数据结构,但是还没有非常突出的案例,这里就不多说了。
总结一下,本节我们介绍了区块链的衍生技术:DAG有向无环图,这是一种全新的数据结构,可以对区块链处理交易的效率、并发力达到显著的提升。
『贰』 什么是DAG,DAG有发展前途吗
DAG(Directed acyclic graph),有向无环图,是计算机领域一个常用的数据结构,因为独特的拓扑结构所带来的一些特性,经常被用到处理动态规划,导航中寻求最短路径,数据压缩等场景中。从15年开始,区块链概念被单拎出来,这之前区块链还只是比特币技术里的一个数据结构,中本聪白皮书里把block和chain连一起的时候也只是a chain of blocks 。随着以太坊去中心化计算机的概念提出来,很多人开始把以太坊称作区块链2.0,而比特币被归到了区块链1.0。至于区块链3.0,市场上为了抢夺区块链3.0的冠名权打的不可开交,没准会是DAG。
『叁』 dag怎么取代区块链(区块链取代银行)
什么是DAG参考ExplainingDirectedAcylicGraph(DAG),TheRealBlockchain3.0
Bitcoin视为blockchain1.0,Ethereum视为2.0,那么3.0是什么?DAG可能会是.
DAG,即DirectAcyclicGraph,有向无环图.它的特点是节点有先后次序,可以有分叉,但还不会有环.DAG常用语数据处理,事务规划,最优路径查找,数据压缩
bitcoin之所以效率低是因为它的POW机制.整个网络只有一个主链,其上的新块只能有一个,无法同时创建多个新块.10分钟左右以内的所有交易记录都被记录到一个块中.Ethereum也是类似,大概15-20秒产生一个新块.
NXT是第一个想到用DAG替代blockchain单链表结构的组织.
有了DAG,就可以同一时间创建多个块.
使用DAG的想法来自于侧链(side-chain).不同类型的交易在不同的链上同时进行.
IoTChain(ITC),IOTA,和Byteball是没有block概念的项目.
如果每个block只有一个transaction,那这个transaction就不用等待被打包,跳过计算hash的过程(即挖矿),直接上链了.
Bitcoin使用UTXO(UnspentTransactionoutput)模型.
DAG网络中,降低网络宽度是比较重要的一个课题.
由于只有transaction,没有打包的过程,DAG比基于PoW或PoS的区块链更快.
DAG网络里,没有矿工.交易的验证直接在交易时进行.对于用户来说这意味着交易可以瞬间完成.
DAG可以有效降低交易费.
IoTChain(ITC)所基于的DAG的TPS达到10,000.
XDAG(匕首币)——未来pow+dag货币之王
Dagger(代币简称XDAG)是一个全新的基于有向无环图(DAG)的加密货币,替代了区块链技术。没有预挖,也没有ICO计划,是一个真正由社区推动、公平开放的项目。而且不同于其它DAG方向的币,Dagger可以进行挖矿,目前CPU、GPU都可以进行挖矿。
Xdag总量为4,294,967,296个(2的32次方),分160年挖完,明年预计大幅度减产,总量减少至8亿。一天产量为138万,每64秒产生一个块,一个块1024枚Xdag。目前是4年递减,每隔4年挖出矿的数量减半。目前Xdag已经挖出近2亿枚,流通量约一亿八千枚。
Xdag于2017年11月被设计出来,内部测试两个月后,也就是2018年1月正式上线主网。它的作者是俄罗斯莫斯科国立大学的高级研究员,数学研究背景。Xdag的目标是创建一个能够允许每秒进行成千上万笔交易的去中心化的支付系统。
Dagger(XDAG)是全世界第一个实现pow+dag的加密货币,既拥有pow的去中心化和高安全性,又加入了dag的高并发,从bitcointalk.com创世以来,就受到全世界的关注,被誉为dag中的比特币。每一个块包含一个交易,块同时也是一个地址。Xdag是仅可以通过挖矿获取,目标是成为全球性的超主权支付货币。完全没有预挖也没有ICO,主网络已经稳定运行五个月,算力上涨异常迅速。
DAG或直接非循环是在分布式、分散式环境中的人之间发送数据的另一种方法。这是在没有区块链的情况下完成的,可以提供更高的可扩展性。目前来看,XDAG网络在POW这种目前最优的去中心化方案下,依然能够拥有1000~10000tps,且整个转账系统零手续费。
XDAG(匕首币)已经于2018年04月22日,晚上6点整(UTC+8),正式登陆Coinbat.com。此为国内交易量最大交易所。
区块=交易=钱包
Xdag中所有的钱包地址、交易记录均是块(Block)。因为这种特性,所有的钱包都需要在网络上有独一无二的block。换而言之,你不可以向不存在的wallet转账。这意味着,不用再担心像其他加密货币一样,打到黑洞地址的情况。之前加密货币最不人性的一点就是容易手误打到错误地址。这一切在xdag中,不会出现。因为只有已经存在的钱包,才在xdag网络上有独一无二的区块。同时Xdag转账是没有任何费用的。
第一个基于DAG技术可挖矿(PoW)的公链
Xdag是采用PoW(工作量证明)的DAG技术,是目前业界唯一个可以进行挖矿的DAG网络。相较于区块链技术Xdag有更高的TPS,同时相对于其他DAG技术,Xdag则采用已经广为认可的PoW共识机制,确保去中心化和公平性。
解决了双花问题
在Xdag中,主块(MainBlock)在每个帧间隔(FrameTime)中生成,Xdag中所有交易均是块(Block),当发生交易产生交易块(TransactionBlock)发送到主网中,见证者会按照规则验证交易,并将交易块链接到主块上,一个交易块会有自己的链接关系,见证者会依据规则确保先到的交易块被链接到主块,后到的块将不会被链接到主块,只有被主块链接的块才是有效的。
高TPS,转账速度快
到目前为止,整个系统已经稳定运行接近5个月,转帐速度极快,基本都在几十秒即可到达,远远超过ETH、BTC。之后可以缩短到十几秒。
目前最好的不可能三角解决方案
Xdag通过pow来保证去中心化和安全性,同时保留了dag的高并发。这是目前市场最完美的不可能三角(高并发、安全性、去中心化不可兼得),具备非常大的区块链三点零潜质。
目前xdag的开发由社区自治,目前开发进度正常,版本更新快。前阵子曾因为算力上涨导致主网出现过两次不同步的现象,经过社区开发人员的开发,目前项目已经很大提升了其稳定性。现在转移开发重点为RPC接口、移动钱包的开发。RPC接口开发完成后意味着能实现交易平台自动冲提功能,届时也会一些交易平台进行对接,如果能够顺利上线一些流通性更好的平台,对项目本身的意义也是非常正面的。也许在未来,会有更科学的技术能够实现点对点交易、安全、匿名、高效的完美整合。但至少在接下来的一段时间里,XDAG绝对会是发展潜力无穷的金子。
xdag打赏address:ZBJ9BLTG+knstcKzwSiNfof9hDoDtdko
为什么要用DAG作为底层技术?相比别的以太坊和比特币底层技术,其优势是什么?DAG区块链与传统区块链工作机制不同之处在于,后者需要矿工完成工作量证明(PoW)来执行每一笔交易,而DAG区块链能摆脱区块链的限制来完成这样的操作。相反的是,在DAG区块链中一笔交易接着另外一笔,这意味着一笔交易能够对下一笔交易提供证明,由此一直排序下去。这些交易之间的连接就是DAG,就像区块通过哈希值来向整条区块链提供它们的名字一样。
在传统块链式区块链中,每笔交易要花费不少时间,而对于DAG区块链来说,交易时间将变得微不足道
什么是DAG区块链技术DAG全称是“有向无环图”,没有区块概念,不是把所有数据打包成区块,再用区块链接区块,而是每个用户都可以提交一个数据单元,这个数据单元里可以有很多东西,比如交易、消息等等。数据单元间通过引用关系链接起来,从而形成具有半序关系的DAG(有向无环图)。DAG的特点是把数据单元的写入操作异步化,大量的钱包客户端可以自主异步地把交易数据写入DAG,从而可以支持极大的并发量和极高的速度。同时,使用DAG技术的TrustNote还支持声明式智能合约,声明式的智能合约要表达的意思是可以直接按照用户想要的结果去写、去描述,以很简单的语言,让大家都能看懂的语言去描述他要干的事情。
截止到2017年年底,“高流量应用”越来越多,除了主流电商平台外,还有直播平台、P2P理财、今日头条、陌陌等崭露头角,如果“高流量应用”与DAG区块链技术结合,将会给行业带来哪些变革呢?除区块链自身的特点去中心化、分布式账本、不可篡改之外,DAG区块链技术不但可以支持高并发,结合双层共识机制,使用工作量证明共识算法,还能够防止“双花”问题。
那么,DAG如何支持高并发的呢?第一,数据不像比特币和以太坊一样强同步,而是弱同步,允许节点在同一时刻数据不一样,数据可以有一些微小的差别。第二,可以通过数据单元之间的引用来完成交易的确认,就是后面发生的单元去引用前面的单元,这样不需要我们把数据传给矿工,整个过程都是由自己去完成的,这个过程很快。DAG是解决高并发比较优美的方法,比起之前的闪电网络,还有其他一些方面,DAG有其先天优势。
再来看看DAG是如何防止“双花”?在有向图里如果能选出一个MainChain,这个时候会发现所有图里面的节点都可以用一种方法来给它做排序,把这个序号连接起来在一排,这张图将会变成跟区块链一样的序列结构,就是排完序的节点,而且每个节点是一个交易,而不是一个区块。所以,确定了主链,通过主链,可以形成全序。最后达到的结局就是在某一个逻辑状态里,交易还是被排序了,这是DAG最关键核心的部分。
“高流量应用”是随着节点数和交易数的增加平滑扩展,当这个节点数超过1亿或交易数超过并发100万时,DAG的特性刚好是交易越多越快,节点越多越快。
『肆』 『学概念找员外』有向无环图DAG的用途
有向无环图(DAG, Directed Acyclic Graph) :是一个无回路的有向图。如果有一个图,从A点出发到B点,然后经过C点,最后可以顺着方向回到A,形成一个闭环,那么这个图就不是非向无环图。如果将从C到A的边方向改为从A到C,则变成有向无环图。如图1 和 图2。
看到这两幅图,应该可以明白了,当然这个图是很简单的,只有三个点,事实上可能是由百万千万或者更多个点组成的图。有向无环图就是从一个图中的任何一点出发,不管走过多少个分叉路口,都没有回到原来这个点的可能性。
拓扑排序 :就是一个有向无环图的所有定点的线性序列。且这个序列必须满足这两个条件:
这个东西,是比较难理解,再上图说话吧。比如在这个有向无环图中,它用拓扑排序,该怎么进行呢?
最后,一个完整的拓扑排序就完成了,结果为:1、2、4、3、5。
大家都知道,在比特币系统中,固定约十分钟出一个块,而且一旦打包成功一个区块,这个区块的信息还必须同步到其他的所有区块上面去,这是极其耗费资源和时间的。同时一个块里面大概能容纳3000笔交易,也就意味着10分钟才能交易成功3000笔。这个交易速度实在是满足不了用户的需求,所以为了解决比特币这个问题,出现了各种分叉币,也可谓是把比特币搞的乱七八糟了。后来以太坊问世后,基于比特币的基础上,交易速度提高了不少,每秒交易可达到20笔左右,但是任然有多次的以太坊拥堵事件,证明这个交易速度还远远不够。
在比特币系统中,如果可以改变51%的节点的记录数据,那么就实现了恶意攻击。然而现在比特币的大部分算力掌握在少数几个较大的矿厂手里,虽然大家都有共识,不会发起恶意攻击,但是不代表不会有意外事件发生。
随着计算机硬件的不断迭代升级,量子计算机的问世,那么比特币的加密算法还会有用吗?会不会被破解掉?虽然比特币的哈希算法可以实时调整难度,但是到底能承受多大的考验,员外是说不清的。
比特币用于大额的跨境转账或者交易等用途,还是挺实用的,但是谁会去用比特币购买小件商品?显然是不可能的,交易手续费就会让你心疼半天,然后还得再等半天的确认时间。
在区块链的应用上使用了DAG图之后,可以使得出块速度变快,因为DAG图中的每个顶点都是一个在某一时间点打包完成的区块。与传统的公链一次性只能产出一个区块来比,DAG的不同节点都可以自己来生成区块,然后这个区块只要选择好自己的下一个或者多个区块作为自己的子区块就好了。仅仅是在这一点上,出块速度就会高出比特币多个量级,交易速度简直可以快的飞起。
基于DAG的数据结构来说的话,对于里面的每个节点来说,因为与之相连的节点很少,而且是有方向性的,只能往前不能后退,所以都不需要再等大量的其他节点达成共识后,再同时确认下一笔交易了,避免了因网络延迟和数据同步造成的大量时间浪费。所以,使用DAG记账的节点的延展性可得到大幅度提升。
从上面这张图中,可以看到DAG的每一个节点都可以向下连接任意多个新的节点,这个有什么用呢?如果在这一个区块内部交易数据或者与之相连的下一步的交易数据也是过多的话,那么就可以分成足够多个区块来共同分担区块压力,从而可以提高交易的吞吐量。相比于比特币这样的系统每次只能打包一个区块来说,简直是完胜。
没有一个东西是完美的,有优势就有缺点,所以DAG的缺点目前在安全问题上面,主要是双花和影子链攻击。这个问题员外目前还没有找到足够好的答案,只能后续再说了。
本文参加优享优质经验征集计划,经验即价值,优享为成长买单
全球首个去中心化经验价值共享平台“优享”开启今夏最强空投!注册即送UX,最高5000UX,更多价值,等你发现!注册链接
『伍』 以太坊多节点私有链部署
假设两台电脑A和B
要求:
1、两台电脑要在一个网络中,能ping通
2、两个节点使用相同的创世区块文件
3、禁用ipc;同时使用参数--nodiscover
4、networkid要相同,端口号可以不同
1.4 搭建私有链
1.4.1 创建目录和genesis.json文件
创建私有链根目录./testnet
创建数据存储目录./testnet/data0
创建创世区块配置文件./testnet/genesis.json
1.4.2 初始化操作
cd ./eth_test
geth --datadir data0 init genesis.json
1.4.3 启动私有节点
1.4.4 创建账号
personal.newAccount()
1.4.5 查看账号
eth.accounts
1.4.6 查看账号余额
eth.getBalance(eth.accounts[0])
1.4.7 启动&停止挖矿
启动挖矿:
miner.start(1)
其中 start 的参数表示挖矿使用的线程数。第一次启动挖矿会先生成挖矿所需的 DAG 文件,这个过程有点慢,等进度达到 100% 后,就会开始挖矿,此时屏幕会被挖矿信息刷屏。
停止挖矿,在 console 中输入:
miner.stop()
挖到一个区块会奖励5个以太币,挖矿所得的奖励会进入矿工的账户,这个账户叫做 coinbase,默认情况下 coinbase 是本地账户中的第一个账户,可以通过 miner.setEtherbase() 将其他账户设置成 coinbase。
1.4.8 转账
目前,账户 0 已经挖到了 3 个块的奖励,账户 1 的余额还是0:
我们要从账户 0 向账户 1 转账,所以要先解锁账户 0,才能发起交易:
发送交易,账户 0 -> 账户 1:
需要输入密码 123456
此时如果没有挖矿,用 txpool.status 命令可以看到本地交易池中有一个待确认的交易,可以使用 eth.getBlock("pending", true).transactions 查看当前待确认交易。
使用 miner.start() 命令开始挖矿:
miner.start(1);admin.sleepBlocks(1);miner.stop();
新区块挖出后,挖矿结束,查看账户 1 的余额,已经收到了账户 0 的以太币:
web3.fromWei(eth.getBalance(eth.accounts[1]),'ether')
用同样的genesis.json初始化操作
cd ./eth_test
geth --datadir data1 init genesis.json
启动私有节点一,修改 rpcport 和port
可以通过 admin.addPeer() 方法连接到其他节点,两个节点要要指定相同的 chainID。
假设有两个节点:节点一和节点二,chainID 都是 1024,通过下面的步骤就可以从节点二连接到节点一。
首先要知道节点一的 enode 信息,在节点一的 JavaScript console 中执行下面的命令查看 enode 信息:
admin.nodeInfo.enode
" enode://@[::]:30303 "
然后在节点二的 JavaScript console 中执行 admin.addPeer(),就可以连接到节点一:
addPeer() 的参数就是节点一的 enode 信息,注意要把 enode 中的 [::] 替换成节点一的 IP 地址。连接成功后,节点一就会开始同步节点二的区块,同步完成后,任意一个节点开始挖矿,另一个节点会自动同步区块,向任意一个节点发送交易,另一个节点也会收到该笔交易。
通过 admin.peers 可以查看连接到的其他节点信息,通过 net.peerCount 可以查看已连接到的节点数量。
除了上面的方法,也可以在启动节点的时候指定 --bootnodes 选项连接到其他节点。 bootnode 是一个轻量级的引导节点,方便联盟链的搭建 下一节讲 通过 bootnode 自动找到节点
参考: https://cloud.tencent.com/developer/article/1332424