技術分享 | 區塊DAG與PoS機制

買賣虛擬貨幣

作者:Steven Pu

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

■ 要包容

單鏈拓撲結構的一個主要限制是網路一次只能接受一個區塊,如果網路能同時接受多個區塊的話會有什麼效果呢?一方面它能增加處理中的交易數量,另一方面能儘可能減少在網路丟棄所有僅留一個分支時單鏈拓撲所浪費的資源。

有向無環圖(DAG)的一個示例

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

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

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

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

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

■ 要環保

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

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

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

■ 但沒有免費的午餐

包容與環保固然重要,但天下沒有免費的午餐,尤其是工程界。下面我們來談談做這些設計面臨的一些問題。

問題 #1:排序

在單鏈中,兩個塊之間不存在相對排序的問題,因為每個區塊都是線性排列且有明確的父級。而在區塊DAG中,我們只能確定某個區塊子集的相對排序,其他排序是不確定的。這種叫做部分排序,在區塊鏈中,是完全不能接受的。

藍色:清晰的相對排序;橙色:模糊的相對排序

在上圖的演示中,我們可以看到藍色區塊的相對排序很清晰,因為區塊都是直接或間接連線著的。如果區塊A指向區塊B,那就必然意味著區塊A在建立時就知道區塊B,因此區塊B一定是在區塊A之前出現。但是,在同一張圖中,橙色區塊的相對排序就比較模糊,因為區塊之間沒有直接或間接連線。

所以,最終就是有些區塊有明確的相對排序,而其他沒有。

我能插個隊嗎?

但是,為什麼排序這麼重要呢?因為通常情況下,在處理鏈上交易時,按照不同的順序去處理交易會產生截然不同的結果。舉個例子,假設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),像交易和區塊這種重要資訊會不停流傳(通報)到網路每個節點上的,且延遲非常短(以秒計)。因此,在任意特定兩個節點中,會有一部分交易一方聽說了而另一方沒有;反之亦然,他們也會收到類似的一組交易資訊,且建立的待處理交易列隊也會差不多。

如果每個節點看到的都是差不多的待處理交易,那麼要求他們生產區塊的話,會生產出涵蓋相似交易的區塊,或者就是彼此相似的副本。顯然這不是我們想要的結果,區塊間的冗餘交易只是在浪費精力——這一點都不環保。

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

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;