什么是DAG?
DAG的全稱為“Directed Acyclic Graph”,中文意思為:有向無環圖,它由有限個頂點和“有向邊”組成,從任意頂點出發,經過若干條有向邊,都無法回到該頂點,這種圖就是有向無環圖。
DAG 在圖論中的本意?
先從區塊鏈說起。如果你有編程知識背景,肯定知道鏈表的概念,鏈表就是一條很多節點鏈接成的一條鏈,每個節點中包含指向前一個節點的鏈接。區塊鏈之所以能連成一條鏈,是因為新區塊中有指向上一個區塊的指針,所以說區塊鏈的數據結構是一個鏈表。但是區塊鏈的問題就在於它是一條線,假設一個區塊生成的時間是固定的,那么這樣一條線的結構就會造成性能瓶頸。因為每隔這個固定時間,只允許有一個區塊添加到鏈上。所以要提升區塊鏈的性能,大概有兩個思路,一個是縮短生成一個區塊的時間,而對於采用了 DAG 技術的區塊鏈項目,走的就是另外一個思路了,也就是改變數據的結構,讓新數據的添加可以平行進行。
DAG 數據結構不是鏈表,而是 Graph 圖。Graph 上有很多節點,也叫做 Vertices 頂點,連接兩個節點的叫做 edges 邊。鏈表,Tree ,圖是三個復雜度遞進的數據結構。鏈表就是一條有方向的線。Tree 是有分叉的,但是任意兩個節點間只有一條路徑能到達另外一點,也就是不能形成閉合的圖形。而圖是可以有閉合的圖形的。當然,深入一點說,Tree 也屬於 Graph 的一個特例。
區塊鏈中使用 DAG 的基本方式?
- 第一個功能,交易驗證。常見的做法是,DAG 項目會要求后發起交易的人必須選擇一個或多個之前的交易來驗證。DAG 項目中不會把交易打包成區塊,這樣每個交易就是一個節點,交易之間的指針就是邊,交易歷史就形成了一個 DAG 。
- 第二個是交易驗證。如何有人發惡意交易,出現了各種爭端,誰來解決呢?基本的共識思路是通過某種規則選擇出幾十個見證人,讓見證人通過 BFT 協議或者其他規則來見證交易。Byteball 項目規則是選出12個實名制的見證人,IOTA 則采用了一個臨時的中心化 Coordinator 機制。
-
第三個是激勵。DAG 類的項目中一般沒有挖礦,通常的做法是一次性發行所有幣。例如,Nano 項目就是通過在創世賬戶中直接發放的形式,來一次性發行所有的幣的。參與驗證的機器會獲得代幣激勵。
DAG技術有什么特點?
- 交易速度快:DAG實現的局部處理和並行結算,可以使得交易速度大幅度提升。
- 拓展性強:因為各個節點,無需等待同步其他的節點數據,使得節點很容易答復延展,因此DAG很適用於物聯網類項目。
- 作惡難度更大:相比於鏈式結構,在DAG圖式結構中惡意修改的難度會大很多,因為DAG擁有着很多的出度和入度,假如要修改某一個節點,那么對應的出入度都要進行修改。
DAG的優缺點?
- 優點:最明顯的就是高速度零費用。DAG 條件下,交易不會打包成區塊。每筆交易都是單獨被驗證的,所以大量的交易驗證都可以並行進行。理論上交易吞吐量是沒有上限的。用戶互相之間互相驗證交易,於是 DAG 項目可以實現0手續費交易。這些優點對於 IOTA 這樣的服務物聯網的區塊鏈項目是非要必要的,因為 IOTA 要處理的是機器和機器之間的交易,通常都是非常高頻和小額的交易,如果過程中再收取手續費,就沒法進行了。
- 缺點:DAG 這個思路應該說安全性還是有待驗證的,各種安全漏洞不斷的被曝出。中心化問題也相對比較嚴重,這一點從上面提過的幾個項目達成共識的方式可以看到。