超乾貨:XDAG是什麼?DAG+PoW

本期速覽

XDAG既擁有DAG的高併發,又擁有PoW帶來的安全性和去中心化。本期Frozen從底層原理講述了XDAG,那麼它究竟有哪些特性?未來的發展方向又會如何?

主講嘉賓

超乾貨:XDAG是什麼?DAG+PoW

項目簡介

超乾貨:XDAG是什麼?DAG+PoW

XDAG是一種基於PoW共識算法和DAG技術的加密貨幣。XDAG是在2017年9月份前後由俄羅斯匿名數學家Daniel開始獨自開發,2018年1月5日主網正式上線,2018年2月2日XDAG代碼移交社區,由社區開始進行開發和維護。項目沒有ICO,沒有預挖,完全由社區驅動。

目前社區由各國各地區的愛好者組成,社區開發者團隊共有17人,分別負責核心代碼開發、顯卡礦機軟件、錢包開發、區塊瀏覽器、礦池腳本工具以及各種小工具開發。

講座內容

1.區塊鏈行業現狀

超乾貨:XDAG是什麼?DAG+PoW

比特幣開創了區塊鏈的先河,公認是 區塊鏈1.0時代,Ethereum將全球計算機的概念帶入現實,被認為是區塊鏈2.0時代,當前的EOS則將blockchain的技術發揚廣大,有人認為是區塊鏈3.0時代的開篇。

雖然行業經過多年發展,但是基於blockchain的區塊鏈技術本身也面臨諸多問題,並且隨著普及範圍擴大這些問題也越來越突出。

儘管業內眾多blockchain開發者,都在嘗試尋找各種技術手段,來解決當前遇到的這些問題,但是從當前技術發展現狀來看,各種嘗試並沒有取得突破性進展。

目前遇到的問題主要有以下兩個方面:

1、blockchain本身的TPS瓶頸限制了區塊鏈技術的性能

2、blockchain較長的確認時間也限制了區塊鏈技術的廣泛應用

針對以上兩個問題,不管是EOS偏中心化的解決方案,還是目前如火如荼的分片技術、側鏈技術都存在一些無法解決的問題。

這一現狀間接說明基於blockchain本身再去擴展將面臨巨大困難和挑戰。

那除了blockchain上再進行擴展是否還有其他的方向可以去突破?答案是有的。

那就是DAG技術!

2.Why DAG+PoW?

DAG (Directed Acyclic Graph 有向無環圖) 並不是一個剛出現的技術,而是在數學的一個分支——圖論中的數學概念,早在1736年被提出,在計算機技術中,則是在計算機科學與技術初期就已經存在的一種數據存儲結構。從理論上而言DAG結構比單鏈結構更復雜,但擁有更好的擴展性。

目前,業內已經有一些基於DAG數據結構的公鏈存在,但是每個公鏈都因為對於DAG技術的理解不同實現路線和適用場景不盡相同。

超乾貨:XDAG是什麼?DAG+PoW

這是NANO的實現方式,主要思路是每個賬戶擁有自己的一條鏈,不同賬戶之間根據交易記錄串聯起來,從而形成DAG。

超乾貨:XDAG是什麼?DAG+PoW

這是IOTADAG樣子,主要思路是根據交易不同的高度和權重讓使用者來確定交易有效性。

超乾貨:XDAG是什麼?DAG+PoW

這是HashgraphDAG樣子,主要思路在於利用節點間的修改過的gossip算法傳播的交易信息構成時間上的序列,從而構成DAG。

超乾貨:XDAG是什麼?DAG+PoW

這是ByteballDAG樣子,它的思路在於:利用見證人節點向每一個交易後追加見證人單元來增加分支上的權重,從而確定當前DAG中的主鏈。

而以上的多種DAG實現並沒有很好的解決去中心化、高TPS和低確認時間。

與眾不同的是XDAG嘗試通過從區塊鏈技術底層的數據結構開始重新設計,並採用另外一種DAG構成方式,巧妙的將PoW共識算法和DAG技術相結合,並同時提供了不同節點之間交易併發處理方式,在確保的網絡安全性和公平性的前提下提高TPS降低確認時間。

超乾貨:XDAG是什麼?DAG+PoW

此圖是XDAG中一個局部的DAG組成

A 表示錢包地址塊,Tx表示交易塊,M表示PoW產生的主塊,W我將其命名為見證塊。

在XDAG中一直有個特點,就是區塊 = 交易 = 地址

超乾貨:XDAG是什麼?DAG+PoW

在XDAG中區塊的數據 結構如上圖中所示,這個數據結構是用來持久化存儲數據使用。

塊結構通過16個名為xdag_field的結構組成,每個xdag_field都是一個結構體,其中由結構體和聯合體組成。

transport_header在傳輸時用來表示序列號,在接收後處理時用來保存下一個塊的地址。

type是一個64位的字段,用來表示一個塊中16個field的類型,其中劃分成16部分,每部分4bit,也就是半個字節,4位可以表示16種類型,因此type這個字段每4位表示一個field對應的類型。

time是用來表示塊產生的時間,採用的格式是1/1024秒,一秒鐘在其中表示為2^10。 同時在節點間數據交換時作為請求時間範圍的起始時間點。

hash是一個24字節的截斷哈希值,通常是另一個區塊的截斷哈希值。amount是以cheato為單位的數量值,用來記錄XDAG數量,cheato是XDAG中的基本單位,1個XDAG包含有2^32個cheato。

end_time 用來表示節點間數據交換時作為請求時間範圍的終止時間點。data 是32字節的哈希值。

在XDAG中以上描述的塊是完全由每個節點、每個錢包自己獨立生成,不會受其他干擾,從而在基礎設計上保證了區塊處理的獨立性,也為後續提到的高TPS打下基礎。

超乾貨:XDAG是什麼?DAG+PoW

此圖則展示了在構建DAG時XDAG採用內部塊的方式來簡化交易狀態以及區塊餘額的處理邏輯。此內部塊只在XDAG邏輯處理過程中才會使用到,並不會持久化存儲。

超乾貨:XDAG是什麼?DAG+PoW

這是一個最簡單的XDAG轉賬處理結構。A表示地址,M表示主塊,Tx1 記為A1地址向A2地址進行的一筆轉賬,W我將其命名為見證塊。

超乾貨:XDAG是什麼?DAG+PoW

一個典型的雙花檢測

假設A1地址有10個XDAG,A1的錢包被人惡意拷貝了兩份,同時發起了兩筆轉賬,一筆Tx1 從A1轉了5個XDAG到A2地址,另外一筆Tx2從A1轉了7個XDAG到A2地址。兩筆轉賬合計12個XDAG,超出了A1地址原有的10個XDAG,是個典型雙花。

在XDAG檢測的邏輯是在節點同一時間收到Tx1和Tx2時,節點生成的W塊會引用Tx1和Tx2,根據穩定的排序規則Tx2會在被W塊引用時填充到了順序編號更小的field中,從而Tx2優先被處理,而Tx1則後處理,從而檢驗出Tx1的花費是一次雙花,從而在內部塊中將這個哈希值指向的交易塊標記為拒絕狀態,而Tx1這個交易塊永遠記錄在DAG中,不會刪除。

超乾貨:XDAG是什麼?DAG+PoW

一個更加複雜的雙花檢測

前提條件和上一個一樣,假設A1地址有10個XDAG,A1的錢包被人惡意拷貝了兩份,同時發起了兩筆轉賬,一筆Tx1 從A1轉了5個XDAG到A2地址,另外一筆Tx2從A1轉了7個XDAG到A2地址。兩筆轉賬合計12個XDAG,超出了A1地址原有的10個XDAG,是個典型雙花。

但是這次情況有變化,那就是此人惡意採用技術手段將錢包連接到不同的節點上,因此就會產生不同節點之間的雙花檢測。

接收到Tx1交易的節點此時並不知道Tx2交易的存在,而接收到Tx2交易的節點同樣不知道Tx1交易的存在,因此這種情況下就需要節點之間的數據交互才能檢測。

此時PoW共識就產生作用,在XDAG中每隔64秒即產生一個主塊,通過主塊M1’ M1’’比較難度,確定出M1’’的難度更高,因此M1’’引用的塊Tx2在排序時優先於M1’引用的Tx1,如此檢測出Tx1為雙花,從而在內部塊中將這個哈希值指向的交易塊標記為拒絕狀態,而Tx1這個交易塊永遠記錄在DAG中,不會刪除。

超乾貨:XDAG是什麼?DAG+PoW

如圖是XDAG更全面的DAG結構,其中為了簡單起見將前面幾張圖裡的錢包地址塊省略展示。

Node表示不同的節點,M 表示PoW挖到的主塊,W標示額外的塊,我將其命名為見證塊。Tx是交易塊。

不同節點分別接收各自的交易塊,將交易塊拼接到DAG中的行為相互之間耦合度較低,通過節點間的數據交互建立之間的聯繫,從而能夠讓不同節點很好地吸收較高的併發來達到高TPS。

同時每64秒通過PoW產生一個主塊,讓去中心化公鏈的交易確認時間也大大縮短,一般在1到2分鐘即可被確認。

3.XDAG未來

超乾貨:XDAG是什麼?DAG+PoW

XDAG未來的方向不僅僅是做一個高TPS的去中心化公鏈,同時也計劃帶來交易的匿名性和智能合約,讓XDAG具有支付屬性以外具有更廣闊的應用場景。

目前社區開發計劃中的Android錢包和iOS錢包已經發布測試版本,在收集社區的反饋,並及時提供更新版本。

輕錢包和全節點錢包還在計劃之中。Golang版本實現已經著手進行基礎開發,C++版本也在進行相關基礎開發。Python版本用於教學和入門XDAG開發,目前已經有了Python的礦機實現。

超乾貨:XDAG是什麼?DAG+PoW

當前XDAG社區需要更多貢獻者加入,分享傳播XDAG相關知識、和社區一起討論各種提議、向社區報告問題、幫助社區做本地化翻譯、直接參與XDAG項目開發貢獻代碼!

感謝所有的曾經幫助過和現在正在幫助XDAG的開發者們,他們有Daniel, Evgeniy, Frozen, sgaragaghu, trueserve, amazingMan2017, ssyijiu, Solar, Wendy, czslience, rubencm, kbs1,還有所有的礦工、礦池主和所有其他的貢獻者們!

問答&交流

Y:這個見證塊能否細說說,它既不是交易也不是地址吧?

Frozen:見證塊是由節點生成的,當節點有收到新的塊時,這個塊並沒有連接到DAG中,而是通過節點生成的見證塊,將接收到的新塊加入到DAG中。

Y:看起來xdag裡面的排序規則對於確定雙花交易特別重要,裡面的排序規則有哪些?

Frozen:排序規則就比較複雜了。。 可能單獨得需要一個時間來分享,排序對於所有區塊鏈項目都很重要。如果無法排序,那麼就無法確認交易,也無法實現智能合約。

Y:如何確認主塊?會不會存在算力更高的礦工作惡的情況?

Frozen:主塊由節點生成,而不是由礦工生成,礦工在確保網絡安全,而節點根據礦工計算得到的hash來生成主塊,不同節點之間的主塊分別生成。主塊在確認過程根據主塊包含的hash難度進行比較,難度高者即獲勝。

Y:節點在系統裡負責打包交易?有沒有作惡的可能?或者說系統裡如果有作惡者,會出現在哪個環節?

Frozen:不打包交易, 節點不參與打包交易,交易塊由錢包擁有者打包 所以節點無法對交易造假,只能選擇拒絕和接受。

R:目前xdag的生態發展怎麼樣?多少礦工,多少用戶?主要應用有哪些?

Frozen:目前統計的錢包地址八萬左右,礦工最近沒有統計數據。目前XDAG還沒有開發出智能合約,還只是一個tps更高的去中心加密貨幣。

R:目前智能合約的開發進度有時間表嗎?目前智能合約的開發進度有時間表嗎?

Frozen:2019Q3發佈,XDAG是個社區驅動項目,沒有項目方 沒有ICO 沒有預挖 所有開發者都是業餘時間開發。


分享到:


相關文章: