Amber Group:解密基於DAG的架構設計
星球君的朋友们
2022-10-13 04:06
本文约9537字,阅读全文需要约38分钟
詳解DAG 的工作原理及其在加密領域的應用

一級標題

一級標題

“DAG”到底是什麼意思?

“DAG”是“Directed Acyclic Graph(有向無環圖)”的首字母縮寫。對於不熟悉計算機科學的人來說,這可能是一個拗口的名詞,因此我們對每個單詞進行如下詳解:

- Directed(有向):該數據結構的數據只向一個方向傳輸

- Acyclic(非循環的):在數據結構上不能從當前狀態返回到之前的狀態,即“非循環的”

- Graph(圖):在數據結構可視化下,該結構顯示為多個頂點之間相互關聯的一組關係

DAG 結構究竟是什麼樣的?檢查數據的排序方式是確定數據結構究竟是DAG 還是區塊鏈的最佳方法。這種排序方式是指如何及時地對交易進行排序。因為我們理解時間是線性的,所以我們通常會認為事件也是按照特定順序發生的。人類認同時間這一概念,因此我們也認同事件是按順序發生的。


上圖是“全序”的一個例子。當確定了哪個事件先發生之後,所有事件都將有確切的順序。在一組全序的事件中,我們會確切地知道每個事件在全序中的位置。如圖使用全序時,事件A 首先出現,然後是事件B,再然後是事件C。這就是事件在區塊鏈中的記錄方式。

然而,分佈式賬本的全序可能會在吞吐量和延遲方面限制可擴展性。可以通過“偏序”賬本來解決部分問題。在偏序中,每個事件相對於所有其他事件的確切順序是未知的。相反,只有相關事件的順序是已知的。我們不確定所有事件的順序,但我們可以確定相互依賴的事件之間的順序。


例如,我們可以確定事件B 發生在事件C 之前。但是,在偏序系統中,我們不確定事件A 何時發生。事件A 可能發生在這些事件之前、或者之後、甚至之間。事件A 與其他事件無關。

通常來講,為什麼我們想知道這些交易是如何排序的?因為我們想知道一個事件是如何導致另一個事件發生的。偏序沒有時間概念,所以在不清楚每個事件發生時間的前提下,我們如何對事件進行排序呢?

“因果序”是該問題的解決方法。因果序是一種偏序,其不考慮事件發生的時間,而只考慮事件之間的因果關係。只要我們可以確定哪些事件導致了其他事件,我們便可以對這些事件進行排序。


上圖是一個因果序的例子。上圖中的事件沒有時間戳,所以無法確定這些事件的確切發生時間。但是,我們可以看到A 導致B 發生,而B 導致C 和E 發生。然後可以得出A 最終導致D 和F 發生。因為C 引起了D,E 引起了F,所以我們可以確定C 和D 以及E 和F 的因果順序。但是,我們不需要確定C 和E 或C 和F 的順序, 也不需要確定E 相對於C 或D 的順序。並非所有事件都是偏序並且彼此之間都有因果關係,但這並無大礙,因為不相關的事件不需要相對於彼此進行排序。

二級標題

一級標題

二級標題

正文

正文

圖片描述

圖片描述


在高層次上,節點創建事件塊,這些事件塊形成一個DAG。 Fantom 使用這個事件塊的DAG 並生成一條區塊鏈(一條確認塊的鏈)。

Fantom 將數據存儲在事件塊中,其中包含財務、技術和其他信息。事件塊是由單個節點創建的數據結構,用於全網共享交易及用戶信息。在上圖中,我們看到的是一個DAG 結構,圓形代表節點,事件塊由節點生成。在上圖中沒有表現出來,其實每個節點都在生成事件塊。每當節點交換交易信息時,都會創建一個新的共享事件塊。事件塊會在整個網絡中共享。當一個事件塊與另一個事件塊通信時,被通信的事件塊會存儲前一個事件塊的交易信息,然後創建一個新的事件塊。隨後將此信息傳遞給下一個事件塊。交易信息被hash,每個事件塊包含一個或多個先前事件塊的哈希值。這會使數據不可變,因為在不更改哈希值的情況下無法修改或刪除先前的事件塊。


如上圖,Opera 鏈DAG 結構中的綠色區域是事件塊,它們相互通信,直到找到一個被稱作“Clotho”塊的事件塊(上圖中的藍色塊)。 Clotho 塊包含一個“標記表”,這是一種數據結構,用於保存特定事件塊之間的所有連接數據。要想被認定為Clotho 塊,Clotho 必須與先前設置的事件塊具有2/3 以上的超多數連接。 Clotho 塊通過標記表數據結構來與DAG 結構中的其他Clotho 塊進行通信。


根據彼此之間的通信信息,Clotho 塊之間達成共識來創建另一個事件塊,稱之為“Atropos”塊(上圖中的綠色塊)。每個Clotho 塊在創建時都有一個特定的時間戳。如果所有節點中至少2/3 的節點時間相同,則Clotho 塊將成為Atropos 塊。這些Atropos 塊串聯在一起構成“主鏈”。主鏈可以看作是DAG 結構中的區塊鏈。每個Atropos 塊都與其他Atropos 塊相連接,共享從Clothos 塊收集來的信息,而Clothos 塊的信息又來自所有其他事件塊。


一級標題

一級標題

具有因果序輸出的DAG

大多數人說的“DAG”實際上指的是一個因果序分佈式賬本。這些DAG 是如何工作的,它們與相對的全序有什麼區別? Avalanche 的X-Chain、IOTA 和Sui 是具有因果序分佈式賬本的例子。

Avalanche X-Chain,一個基於UTXO 的DAG。

比特幣引入了未花費交易輸出(UTXO)模型來記錄錢包之間的轉賬狀態。每個UTXO 都是一個所有權鏈,所有者簽署交易後便將UTXO 所有權轉移至新所有者的地址。在UTXO 的背景下,比特幣應被描述為區塊鏈,而Avalanche 的X-Chain 應被描述為DAG。 X-Chain 使用因果序的Avalanche 共識協議。當你向某人發送AVAX 時,你就在使用X-Chain。要了解Avalanche 的DAG 是如何工作的,首先需要知道Avalanche 的DAG 結構是如何形成的。


Avalanche 共識分為四個主要階段:Slush、Snowflake、Snowball 和Avalanche。最後階段與Avalanche 共識相對的是Snowman 共識,我們將在後面對此進行探討。我們先來看看Slush 共識是如何運作的。 Avalanche 網絡由許多節點組成。每個節點具有三種狀態:無狀態、真和假。下面我們更直觀地分別用顏色來表示:無色、藍色和紅色。


每個節點一開始都是無色的,在此面臨投票決定真或假(藍色或紅色)。一旦選擇了一種顏色,該節點就會與網絡中的眾多其他節點進行通信。如果這些節點還沒有顏色,它們將採用與該節點相同的顏色。如果大多數節點具有相同的顏色,則原始節點將保持該投票結果。如果大多數節點是不同的顏色,則原始節點會將其投票結果反轉為該顏色。


節點之間將進行多輪通信,直到所有節點達成共識。目標是讓每個節點在顏色上形成一致。當節點傾向於某個顏色時,這將加強該傾向並將正確結果導向於該顏色。這個概念是Avalanche 的構建基礎,一切都建立於此概念之上。

Avalanche 的第二個構成部分是Snowflake 協議。在節點導入內存時,每個節點都有一個計數器。每當進行Slush 協議通信返回相同顏色時,計數器都會加1。而每當節點反轉結果返回不同顏色時,計數器都會重置。一旦計數器達到足夠大的數字時,它將鎖定其狀態並防止節點改變顏色。這將有助於鞏固真實的顏色。

節點在第三個階段Snowball 協議中將以更大的內存記錄數值。 Snowball 協議在Snowflake 協議的基礎上增加了置信度。 Snowflake 協議的節點不是根據與之通信的其他節點來改變顏色的,而是通過回顧自身所有的顏色變化歷史,並根據節點的置信度狀態來改變顏色,置信度考量了該節點的投票變化歷史數據。

以上所有階段最終導向Avalanche 協議。 Avalanche 是一個僅能添加(將交易添加到之前的交易上)的DAG 結構。 Avalanche 也可以在沒有DAG 結構的情況下運行,比如Avalanche 在合約鏈(C-Chain) 和平台鏈(P-Chain) 上的線性結構即是這種情況。 Avalanche 共識的開發團隊Team Rocket 認為DAG 架構優於區塊鏈,因為DAG 架構每個交易的投票都聯動其添加的所有交易,所以DAG 的投票機制更有效率。


Avalanche 共識由多個Snowball 事件組成,以此將所有已知交易構建成動態DAG——每個Snowball 事件都是圖中的一個頂點。頂點類似線性區塊鏈中的一個個區塊。它包含其父代的哈希值,以及一系列交易的列表。 Avalanche 共識建立在Snowball 的基礎上,置信度的概念依然有效,只不過是應用於DAG 的各個節點上。與之前討論的紅藍決策不同,Avalanche 共識中的節點會判斷一筆交易是否正確或是否與其他交易衝突,並彼此達成共識。每個交易都鏈接在一個父交易上,所有父交易都鏈接回一個創世頂點上。一個交易下可以有子交易,子交易與其所有的父交易相鏈接。因為需要一個交易作為所有其他交易的基礎(IOTA 也有一個創世頂點),所以Avalanche 需要一個創世頂點;創世頂點很重要,因為只支持添加操作的交易都需要一個添加主體。但是,如果直接將Snowball 應用於節點構成的DAG 上,這會引發一個尚未解決的問題,這就是交易衝突或雙花。因此Avalanche 在Snowball 的基礎上添加了“chit”這一概念。當置信度達到閾值時,將一個稱為chit 的計數器添加到交易中,並賦值“1”。如果沒有賦值,則chit 計數器為“0”。該節點將計算chit 值的總和作為額外的置信設置,類似於Snowball 的置信度。然後節點使用chit 的總和來確定某個交易的置信度,及其所有子交易(添加到節點上的新交易)的置信度。

Avalanche 能夠整合Slush、Snowflake 和Snowball 並將它們調整為線性鏈。這樣做是為了與Avalanche 共識並行的Snowman 共識,這兩者完全不同。不同於Avalanche 的UTXO 模型,Snowman 共識是基於賬戶的。 Snowman 共識用於Avalanche 網絡的平台鏈(P-chain)和合約鏈(C-chain)。該協議原理與上述相同,但每個頂點只有一個父節點而不是多個父節點。因此所有頂點形成全序。這也使整體結構呈現為區塊鏈,而不是DAG。這對於需要知道交易先後順序的應用程序來說非常有用,並且Snowman 共識還支持智能合約。

Avalanche 共識協議用在貨幣轉賬上表現驚人,並且還可以應用於各種其他協議。在硬分叉至其自有項目Bitcoin ABC 之前,Avalanche 曾被用作比特幣現金的預共識機制。 Avalanche 的DAG 結構提升了交易速度,同時因為比特幣現金不需要智能合約,所以DAG 不兼容智能合約的缺陷對此也毫無影響。在支付領域中,Avalanche 能夠忽略智能合約的需求,只強調基於DAG 的賬本如何能更有效地擴展功能。

IOTA,使用工作量證明且基於交易的DAG

IOTA 的因果序結構被稱為Tangle,這是一個並行處理交易的網絡。 Tangle 是IOTA 構成DAG 的數據結構。 IOTA 的tangle 包含交易,其中每筆交易在圖中表示為一個頂點。當一筆新交易加入Tangle 時,它會選取兩個先前的交易來批准,並將兩個新鏈接添加到圖中。

在下圖中,交易G 批准了交易E 和F。交易包含諸如“Alice 給了Bob 十個IOTA 幣”之類的信息。未經批准的交易被稱為“tip”。交易G 就是一個tip,因為它尚未被批准。每個新加入的交易都需要鏈接兩個待批准的tip。有一些策略來幫助選擇tip,但最簡單的是隨機選擇兩個tip 來批准。對於新交易來講,選擇tip 來批准的過程極具可擴展性。


紅色交易I 和G 是未經批准的tip,因為它們沒有與任何其他交易相關聯。其他所有交易都已被批准,因為每個交易都有與之相鏈接的其他交易。

圖片描述


圖片描述


每筆交易都有自己的權重,同時每當一個tip 添加到tangle 上時,累積權重都會增加。

上圖中,我們可以看到交易D 直接由交易E 和H 批准,同時也間接由G 和I 批准。因此D 的累積權重為3+1+3+1+1=9,即其自身權重加上E、H、G 和I 的權重之和。

累積權重較大的交易比累積權重較小的交易更重要。每個添加到tangle 中的新交易都會通過自身交易的權重來增加前面交易的累積權重。隨著時間的推移,較舊的交易變得越來越重要。因為我們可以認為沒有實體能夠在短時間內生成具有足夠大權重的交易,因此使用累積權重能夠避免垃圾交易攻擊及其他載體的攻擊。

類似於Avalanche 的X-Chain,這種方法雖然具有高度可擴展性,但幾乎不可能集成智能合約。因此為了與其他智能合約鏈競爭,IOTA 正在上線一個單獨的智能合約層,稱為“Assembly”。 Assembly 是一個全序的Layer 2,旨在支持EVM 和WASM 智能合約。

Sui,使用權益證明的智能合約DAG

圖片描述

圖片描述


無論交易如何排序,所有交易都在同一個網絡上並行處理。

圖片描述

圖片描述


Sui 的賬本是一個“對象存儲庫”或“對像池”,其數據存儲在DAG 中。例如,發送USDC 這一行為是更新一個對象的“所有者”屬性的行為,這不會對其他對象產生影響。

關鍵要點

關鍵要點

關鍵要點

就速度和吞吐量而言,交易的因果序似乎比全序更有優勢。然而,當嘗試創建的應用程序需要嚴格按時間排序時,缺乏排序的因果序就會產生問題,並且許多項目無法在其DAG 架構上正確地運行智能合約。 Fantom 類似區塊鏈結構的全序架構支持EVM 和智能合約。儘管Fantom 具有全序輸出,但開發人員依然找到了方法來優化DAG 共識機制下的Layer 1。 Avalanche 則選擇了不同的方法,其創建了一個單獨的共識機制Snowman 來支持EVM 和智能合約的便捷開發。 IOTA 也選擇了另一種方法,其正在創建框架來實現在IOTA 上輕鬆部署區塊鏈實例,以此來支持EVM,從而有效地創建全序的Layer 2 基礎設施。 Sui 的獨特設計很有前景,交易既可以是全序的,也可以根據需要採用因果序,兼容智能合約的同時,還能夠減少延遲。

二級標題

二級標題

免責聲明

免責聲明

免責聲明

原文鏈接

原文鏈接

原文鏈接

星球君的朋友们
作者文库