天天看點

有向無環圖(DAG)技術白話解讀有向無環圖(DAG)技術白話解讀

有向無環圖(DAG)技術白話解讀

區塊鍊技術非常熱門,但随着越來越多人使用比特币、以太坊等區塊鍊,使得效率低下的問題越來越突出。尤其是2017年6月以來,ICO市場爆炸式增長,人們瘋狂的購買以太坊用于投資ICO,導緻以太坊網絡經常嚴重延遲。有些人為了能加快以太坊上的轉賬,甚至将手續費(Gas費用)調高到幾百美金。這已經嚴重違背了區塊鍊作為去中心化支付手段的初衷。

為此,擴容已經成了目前區塊鍊技術發展的重要議題。并出現了分片、側鍊、DPoS等擴容解決方案。

除了這些對現有區塊鍊改進的方案之外,還出現了一項受到廣泛關注的技術:有向無環圖,即Directed Acyclic Graph(DAG)。

網上關于DAG的資料并不很多,僅有的一些資料也非常學術性,較難了解。本文嘗試用較易了解的方式來解釋下什麼是DAG技術。

我們知道,區塊鍊技術是一種鍊式資料庫結構,每個區塊就像鐵鍊一樣,環環相扣。

DAG其實與數組、排列、區塊鍊一樣,也是一種資料結構。

但與區塊鍊不同,DAG将最長鍊共識改成最重鍊共識。傳統區塊鍊上,新釋出的區塊會加入到原先的最長鍊之上,并且以所有節點都認為最長的鍊為準,依次無限蔓延。而DAG中,每個新加入的單元,不僅僅隻加入到長鍊裡的一個區塊,而是加入到之前的所有區塊。假設當你釋出新交易時,前面有兩個有效區塊,那麼你的區塊會主動同時連結到前面兩個之中,DAG 中的每個新單元,驗證并确認其父單元,以及父單元的父單元,慢慢可達創世單元,并将其父單元的哈希包含到自己的單元裡面。随着時間遞增,所有交易的區塊鍊互相連接配接,形成圖狀結構,如若要更改資料,那就不僅僅是幾個區塊的問題了,而是整個區塊圖的資料更改。DAG這個模式相比來說,要進行的複雜度更高,更難以被更改。下圖是一個網狀的DAG結構:

有向無環圖(DAG)技術白話解讀有向無環圖(DAG)技術白話解讀

最著名的應用DAG技術的項目是IOTA,IOTA改進了DAG,并提出了Tangle(纏繞)方案。即要驗證新的交易前,隻要直接驗證之前的兩個交易,這也使得在這兩個交易之前所有被驗證過的交易得到間接驗證。在IOTA的Tangle中,有一個權重積分的概念,所謂權重積分是指它自身的權重與它驗證過的所有交易的自身權重之和。在DAG 結構中,交易總是自己建立并釋出。從理論上看,攻擊者總是可以建構比它要推翻掉的那個交易權重更高的交易用以雙花。

看了以上文字後,是否有點暈了,沒關系,下面,我通過圖形來形象的解釋一下:

首先來看區塊鍊,區塊鍊是一種鍊式資料結構,如下圖:

有向無環圖(DAG)技術白話解讀有向無環圖(DAG)技術白話解讀

而DAG的資料結構則可以用下圖來表示:

有向無環圖(DAG)技術白話解讀有向無環圖(DAG)技術白話解讀

在上圖中,1和2号是創世節點;第3個節點産生時,隻需要确認1号和2号的交易;第4個節點産生時,隻需要确認2号和3号,以此類推。

上圖是已經經過拓撲排序後的圖,比較好了解。它也可以表示成網絡圖結構,如下圖:

有向無環圖(DAG)技術白話解讀有向無環圖(DAG)技術白話解讀

如果還沒搞懂,那我們再用服裝縫制工藝來表示區塊鍊和DAG資料結構(雖然比方不是很合适,但便于普通人了解):

下圖是平針針法,就好像區塊鍊,是一個單鍊的結構。

有向無環圖(DAG)技術白話解讀有向無環圖(DAG)技術白話解讀

下圖是回針針法,每次産生新的節點(針眼)後,需要往回走一針,就好比DAG,需要有之前的兩個節點同時進行确認。

有向無環圖(DAG)技術白話解讀有向無環圖(DAG)技術白話解讀

DAG不是區塊鍊技術,但是現在通過DAG技術實作的去中心化網絡仍舊被歸在區塊鍊闆塊中。目前比較流行的除了上文提到的IOTA外,還有ByteBall(位元組球),xDAG,以及SPECTRE。這些項目都在基礎的DAG結構上做了優化處理。

DAG技術才剛剛起步,有很多不完善的地方,但我相信該技術的發展前景會非常良好。目前IOTA的TPS(每秒交易次數)可以達到600-900筆,已經超過paypal的交易能力。随着應用的人更多,執行效率會更高。這是DAG技術與區塊鍊技術最大的不同:區塊鍊技術的效率會随着應用的增加而降低,而DAG卻恰恰相反。

有向無環圖(DAG)技術白話解讀有向無環圖(DAG)技術白話解讀

繼續閱讀