本文,我們將介紹 Taraxa 是如何運用區塊 DAG 拓撲結構,並結合權益證明機制(PoS)來解決吞吐量和安全性的平衡問題。

要包容
技術解讀 | 區塊 DAG 與 PoS 機制

單鏈拓撲結構的一個主要限制是網絡一次只能接受一個區塊,如果網絡能同時接受多個區塊的話會有什麼效果呢?一方面它能增加處理中的交易數量,另一方面能儘可能減少在網絡丟棄所有僅留一個分支時單鏈拓撲所浪費的資源。
技術解讀 | 區塊 DAG 與 PoS 機制有向無環圖(DAG)的一個示例

爲了展現這個更具包容性的方案,我們選擇創建一個圖表,而不是線狀的鏈。大家可能沒有意識到,雖然大部分人認爲區塊鏈是線狀的,但像比特幣、以太坊這種傳統單鏈實際上是由分支構成,且看上去更接近樹狀,而非線狀。這種類型的樹狀結構也是圖表的一種,說的再具體些,就是一個有向無環圖(DAG)。

「DAG」這個詞聽起來很複雜,但也就是名字比較特殊,它表現的涵義其實就是:

  • 圖表中的區塊(數學裏稱爲「頂點」)是相連的。

  • 這些連接(數學裏稱爲「弧」)是有方向的,比如區塊 A 指向的是區塊 B。

  • 任選一個區塊並沿着所指的方向走,無論哪條路徑都不會回到同一區塊——也就是說圖表中沒有閉環。

■ 要環保
技術解讀 | 區塊 DAG 與 PoS 機制
工作量證明機制(PoW)不一定是所有單鏈的特徵,但許多單鏈網絡,例如比特幣、以太坊,通常會將其作爲共識算法的重要組成部分。在這樣的機制中,節點通過解決加密難題來獲得出塊資格,本質上就是一種去中心化彩票。

但是,這種看似簡單而優雅的方法,其實非常耗電。劍橋大學的數據顯示,僅比特幣網絡每年就能消耗逾 60 太瓦時(TWh)的電力,超過了瑞士全國每年的能耗總量。Taraxa 希望能通過從 PoW 到 PoS 的轉型來避免消耗這麼多能源。

在 PoW 機制中,出塊的特權來自於外部資源的投入,包括昂貴的定製硬件和大量電力。而在 PoS 機制中,出塊資格由內部資源決定,即賬戶的持幣量。不過兩種方案的核心經濟動機是相似的,投入大量資源的參與者不會做惡或者破壞網絡完整度,否則網絡整體價值就會降低,他們自己持有的幣也會貶值,未來收益也會減少。

■ 但沒有免費的午餐
技術解讀 | 區塊 DAG 與 PoS 機制
包容與環保固然重要,但天下沒有免費的午餐,尤其是工程界。下面我們來談談做這些設計面臨的一些問題。

*問題 #1:排序 *

在單鏈中,兩個塊之間不存在相對排序的問題,因爲每個區塊都是線性排列且有明確的父級。而在區塊 DAG 中,我們只能確定某個區塊子集的相對排序,其他排序是不確定的。這種叫做部分排序,在區塊鏈中,是完全不能接受的。
技術解讀 | 區塊 DAG 與 PoS 機制在上圖的演示中,我們可以看到藍色區塊的相對排序很清晰,因爲區塊都是直接或間接連接着的。如果區塊 A 指向區塊 B,那就必然意味着區塊 A 在創建時就知道區塊 B,因此區塊 B 一定是在區塊 A 之前出現。但是,在同一張圖中,橙色區塊的相對排序就比較模糊,因爲區塊之間沒有直接或間接連接。

所以,最終就是有些區塊有明確的相對排序,而其他沒有。
技術解讀 | 區塊 DAG 與 PoS 機制我能插個隊嗎?

但是,爲什麼排序這麼重要呢?因爲通常情況下,在處理鏈上交易時,按照不同的順序去處理交易會產生截然不同的結果。舉個例子,假設 A 現在有一個幣,然後我們來進行下面三種交易:

∙  A 發送一個幣給 B

∙  A 發送一個幣給 C

∙  D 發送一個幣給 A

按照不同順序處理這三筆交易會產生不同的結果,例如:
∙ 按照順序(1,2,3):交易 1 成功,交易 2 失敗(因爲 A 沒有多餘的幣了),交易 3 成功
∙ 按照順序(2,3,1):交易 2 成功,交易 3 成功,交易 1 成功
區塊鏈中,排序是需要網絡達成共識的一個非常重要的屬性(可參考之前撰寫的區塊鏈入門文章),所以只實現部分排序是不可接受的。

問題 #2: 隨機性與延遲
放棄 PoW 機制也就意味着放棄所有相關功能,這裏我們來重點講下兩個功能:隨機性與延遲。

隨機性是指 PoW 機制隨機選擇節點出塊。當然這個“選擇”節點的過程並非由某個中心實體完成,而是全憑運氣,看哪個節點在什麼時候先解決難題(在算力相當的情況下)。

爲什麼說隨機性重要?因爲區塊生產者需要隨機挑選,如果不是隨機挑選而是在出塊之前就公之於衆,那他們就有可能成爲攻擊、行賄及其他惡意行爲的對象。此外,區塊生產者本身也會有很大動機去行騙或者暗中勾結,謀求私利——例如,把他們自己的交易安插在其他人之前,試圖創造分支實現雙花等。因此,隨機性能夠讓網絡更加公平,更加誠實。延遲指的是解決 PoW 難題所花費的時間,比如比特幣的平均解題時間是設置在 10 分鐘左右。這種延遲能夠控制網絡出塊的頻率。放棄 PoW 機制後,我們需要尋找其他方案來製造這種延遲。

可我們爲什麼需要延遲呢?首先,沒有哪個網絡可以無限處理多個區塊,因爲每個節點都會耗盡帶寬、存儲空間、內存或者 CPU,而無論哪種資源短缺都會是出現瓶頸的首要因素。其次,也沒有無限數量的交易要打包到無限數量的區塊中。理想情況下,網絡生產的區塊數量和每個區塊的交易數量應該根據網絡條件動態調整,但任何情況都不應該出現零延遲。

問題 #3: 區塊效率



當節點生成區塊時,它會決定網絡接下來要處理哪些交易。在任意特定時間裏,網絡中的每個節點都會維護一個待處理交易列表——這些交易已經發送到網絡中但尚未打包到區塊。新區塊生成的時候,節點會查看這個待處理列表,並選擇一個子集打包進區塊。隨着時間推移,不同網絡在挑選交易時形成了不同的慣例,其中大多數是受經濟激勵驅動。

在任意特定時間裏,如果網絡或節點未出現嚴重問題,那所有全節點看到的待處理交易列隊應該是差不多的。因爲區塊鏈系統是一個點對點網絡(P2P),像交易和區塊這種重要信息。
技術解讀 | 區塊 DAG 與 PoS 機制會不停流傳(通報)到網絡每個節點上的,且延遲非常短(以秒計)。因此,在任意特定兩個節點中,會有一部分交易一方聽說了而另一方沒有;反之亦然,他們也會收到類似的一組交易信息,且創建的待處理交易列隊也會差不多。
技術解讀 | 區塊 DAG 與 PoS 機制如果每個節點看到的都是差不多的待處理交易,那麼要求他們生產區塊的話,會生產出涵蓋相似交易的區塊,或者就是彼此相似的副本。顯然這不是我們想要的結果,區塊間的冗餘交易只是在浪費精力——這一點都不環保。

下一篇文章中,我們將繼續介紹 Taraxa 是如何解決區塊 DAG 的排序問題的。後續的文章還會講到模糊分片算法(Fuzzy Sharding),以及 Taraxa 區塊鏈如何隨機挑選區塊生產者並界定交易管轄權——無需耗費協調成本就能解決隨機性、延遲及區塊效率等問題。