鏈式結構(見下圖)的賬本代表是大家熟知的比特幣。比特幣透過他的共識機制確保只有一條合法主鏈,但是工作量證明會增加網路延遲,以確保網路同步並能抵禦大多數攻擊。同時我們看到圖中的Block1被鏈主鏈丟棄了,
但是這個Block也是礦工挖出來的,也就是他耗費了我們的資源(計算資源、電費)卻是一個無用功,這就導致了比特幣的TPS非常低,只有7TPS。當然比特幣正在進行測試的閃電網路(Lighting Network)可以達到10000的TPS,不過這是另一個技術層面的問題,我們以後有機會與大家討論。
2.圖式結構(DAG)
圖式結構(見下圖)的賬本代表是IOTA和ByteBall。DAG是具有方向且沒有任何迴圈的圖形。您可以將其視為建立區塊鏈過程中的一箇中間環節–它的某些塊已經與邊緣連線(因此是有序的),而有些則沒有,因此需要額外的精力來構建基於DAG的最終鏈,而這正是基於DAG的共識協議所需要的。
圖式結構比鏈式結構具有抗雙花攻擊、交易費低(IOAT可以做到0)且可以達到上萬的超高TPS,Alpha Zero專案的DAG協議在128節點下可以達到100000TPS。但是圖式結構有兩個最大問題那就是容易造成中心化和不支援智慧合約。DAG的應用場景在於支付和物聯網,我們在這裡不做過多的討論,有興趣的社羣成員可以自行在網際網路上學習。
3.樹圖式(塊圖式)結構
樹圖式結構(見下圖)的賬本代表是DMCH。這種結構其實是綜合了鏈式和圖式結構的優點。
樹圖式(塊圖式)結構的具有抗雙花攻擊、去中心化、支援智慧合約、高TPS的特點。DMCH在實驗室環境中TPS達到了5000。當然我們並不是說DMCH效能有多麼優秀,因為網路情況、硬體水平等約束條件不一樣會導致TPS峰值的差異,我們希望大家能夠對樹圖式(塊圖式)結構TPS的量級有所概念。目前DMCH主網的TPS保持在70TPS,這是個什麼水平呢?目前比特幣是7TPS,以太坊是25TPS,萊特幣是56TPS,門羅是4TPS,Zcash是27TPS,DASH是35TPS。不好意思,寫到這裡老祖又去買了點DMCH。
DMCH BLOCK-DAG原理-大道至簡
經我們與DMCH開發人員在社羣Discord溝通DMCH BLOCK-DAG技術細節後,在這裡給社羣成員講解下DMCH BLOCK-DAG樹圖式(塊圖式)結構的實現原理,之所以我們在這裡與大家講解原理,是因為DMCH的開發人員把技術講解的非常簡單,正所謂大道至簡,如果別人能把複雜的問題用簡單的語言講清楚,那麼這個人一定是值得信賴的。
1.使用BLOCK-DAG技術的目的
· 實現DMCH鏈上擴容,解決DMCH鏈的吞吐能力,提高TPS。
· 提高DMCH鏈安全性,抵禦51%算力攻擊、先天免疫雙花攻擊。
2.BLOCK-DAG技術提高DMCH鏈效能的原理
DMCH BLOCK-DAG技術與傳統比特幣為代表的鏈式結構最大的不同是在同一個區塊高度上允許有多個塊。這意味著區塊的組織是以圖為基礎,而非“鏈”。為了相容傳統表述,後文仍然用“區塊鏈”來描述整個樹圖式(塊圖式)區塊結構。總結起來有以下兩個核心點:
· 同一鏈高度同時有n個區塊,意味著同一高度交易量增大n倍。
· 極大地減少了比特幣因為啟用最佳鏈切換時丟棄塊的低效率操作。
3.BLOCK-DAG技術實現過程中解決的問題
DMCH BLOCK-DAG技術在同一個區塊高度上允許有多個塊的特點引發了下面兩個問題:
· 解決同一鏈高度上所有的塊的交易去重和雙花問題。因為BLOCK-DAG技術允許塊的併發,所以BLOCK-DAG技術把全部合法交易都打進了塊,然後廣播上鍊,導致一個鏈高度對應多個塊,而這些交易有可能是重複的、雙花的。
· 解決交易的順序性、確定性問題。因為某些交易之間存在關聯性,例如B交易引用了A交易,典型的情況是智慧合約,如果在DMCH上建立了合約交易,那麼就會有呼叫合約的交易。
老祖請教了DMCH開發後,發現他們真的是天才,技術有時候真的就是一張紙,捅破了就那樣,以下是解決思路,方案非常簡單:
· 對於第一個去重和雙花問題,解決思路是對這些交易按照規則篩選和排序、確定哪些交易是真正合法有效的,實現方式是每個全節點根據共識規則(見下文共識規則)自動挑選有效交易並且按照規則生成順序存入單獨的交易資料庫。
· 對於第二個確定交易順序性、確定性問題,解決思路是對區塊鏈進行收斂和排序,透過進行“拓撲排序”,生成全序(Full Order),這裡的收斂演算法應該具有高效,一致性的特點。
DMCH共識規則是一個高度下最多允許3個塊,每往前推8個塊根據累計難度最大值挑選出一條主鏈、這個主鏈區塊高度我們稱之為鏈高度;同一鏈高度因為存在多個區塊,系統按照難度從大到小的順序進行排序,最終完成全網每個塊的拓撲順序排序工作,這個排序出來的高度我們稱之為拓撲高度;因此,DMCH有鏈高度和拓撲高度兩個高度,而且拓撲高度總是大於鏈高度(請大家記一下“兩個高度”這個概念,後面講解檢視區塊瀏覽器會用到)。
4.DMCH BLOCK-DAG技術順便解決了51%雙花攻擊
在理解了DMCH BLOCK-DAG技術後,老祖敢於用“順便”這個詞語。由於低算力礦工產出的新塊也會被鏈上接納(所謂的側鏈),也會得到部分割槽塊獎勵(所謂的側鏈獎勵),所以擁有統治性算力的礦工,不能再隨意發動雙花攻擊,強制進行鏈回滾等行為。DMCH的出塊時間是15秒,區塊收斂2分鐘,推算得出8個高度塊後不允許重組,按照每個高度最大允許3個塊計算,總計24個塊,在這期間只要一個塊被加入進鏈就不能對DMCH鏈發動51% 攻擊。所以DMCH鏈不能回滾交易,只能打空塊阻止交易、其最低算力要求是23/24=95.8%,其實用降低比解決要好,因為當算力超過95.8%,那麼攻擊就有可能發生。
5.DMCH BLOCK-DAG技術程式處理邏輯
約束條件:
為了提升收斂的效能,在指定的區塊高度範圍內進行區塊收斂,這是DMCH網路共識的一部分。經瞭解當前DMCH網路收斂區間為8個高度,所以當一個區塊的區塊高度不在收斂區間8以內,該塊將被直接丟棄。
處理邏輯:
在礦工產出新塊的時候,取得所有的未端區塊集合,稱為Tips(Tips是IOTA技術中的名詞,意思是沒有確認的交易),按累計難度對Tips進行排序,取前K個Tip,當前K=3;新塊記錄這些Tips的塊Hash,這類似於區塊鏈中的父塊Hash。在收到新塊後,如果合法性檢查透過,則開始按以下步驟進行收斂:
第一步:
從當前區塊鏈的所有頂點(Tip)沿著圖的路徑向前追溯,找到第一個正在同 步的塊(即還處在收斂狀態,沒有穩定確認的塊),因為可能有多個頂點,則可能得到一個集合G。
第二步:
對集合G按累積難度進行排序,其中難度最低的塊及其高度,設為Start。
第三步:
取當前區塊鏈的所有頂點中,累積難度最大的Tip對應的塊及高度,設為End。
第四步:
令區塊範圍R為[Start,End],在區間內按累積難度排序,得到一個唯一的線性化塊的順序。
第五步:
遍歷上述線性化的順序表,去掉其中重複的交易。
第六步:
當有新塊產出時,重複上述步驟。
學會檢視DMCH區塊瀏覽器
至此,我們已經對DMCH BLOCK-DAG技術進行了介紹,有了這個基礎,我們來看下DMCH的區塊瀏覽器(見下圖),官方區塊瀏覽器地址是https://explorer.darmacash.com/。
我們從圖中可以看到一個雜湊值為f07809be41f26dbbc9e265314aecb71637a115c8cf9fd06d089c8a46858ad961的區塊的鏈高度是109215,拓撲高度是134117,該塊屬於側鏈,獲得獎勵0.0691;另一個雜湊值為38f1a10ff96157159a15b52fb201b322ba06034e428246b3d009df136e35adc3的區塊的鏈高度是109215,區塊高度是134115,該塊屬於主鏈,獲得獎勵0.345。只要你理解了我們上文說的BLOCK-DAG技術原理,那麼你就可以理解並得出這樣一個結論:在DMCH中,拓撲高度與區塊是一一對應的,而鏈高度可以最多對應三個區塊。
使用BLOCK-DAG技術背後的戰略意圖
總結來說,傳統鏈式結構不停地透過切換和丟棄區塊來收斂頂端的區塊,是造成TPS低的最重要的原因,而BLOCK-DAG透過並行出塊解決上述問題,從而大幅提升TPS,這就好像比特幣是單核電腦,而DMCH是多核電腦。
DMCH的BLOCK-DAG技術實際上是一個用空間換時間、換效率的經典案例。由於塊的併發,DMCH的資料庫會比一般的專案資料庫大一些,這是犧牲的空間,但是在當前儲存成本越來越便宜的情況下,這個犧牲不足掛齒,而這個犧牲換來的是TPS提升到70(綜合考慮了全球硬體和網路水平,實驗室裡是5000TPS),15秒一個塊,全網收斂2分鐘,且支援匿名合約。
那麼DMCH使用這個BLOCK-DAG技術戰略意圖是什麼呢?老祖用一句話說明白:以太坊目前的TPS是25,且僅支援非匿名合約。