大家好,我是Frozen,今天很有幸和大家一起分享XDAG,感謝計然研究院的邀請!

之前計然研究院多次邀請來做關於XDAG項目技術介紹,一直沒有找到合適的時間,今天總算找到合適的時間合適的地點和大家一起分享。

友情提醒!

今晚的分享內容很乾,默認諸位已經對區塊鏈相關知識了解較為深入。

下面咱們開始分享。

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

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

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

雖然行業經過多年發展,但是基於blockchain的區塊鏈技術本身也面臨諸多問題,並且隨著普及範圍擴大這些問題也越來越突出。儘管業內眾多blockchain開發者都在嘗試尋找各種技術手段來解決當前遇到的這些問題,但是從當前技術發展現狀來看各種嘗試並沒有取得突破性進展。

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

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

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

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

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

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

那就是DAG技術!

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

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

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

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

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

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

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

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

此圖展示了XDAG中一個局部的DAG組成。

A 表示錢包地址塊,Tx表示交易塊,M表示PoW產生的主塊,W我將其命名為見證塊。在XDAG中一直有個特點,就是區塊= 交易= 地址

在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打下基礎。

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

這裡展示了一個最簡單的XDAG轉賬處理結構。

A表示地址,M表示主塊,Tx1 記為A1地址向A2地址進行的一筆轉賬,W我將其命名為見證塊。

上圖展示了一個典型的雙花檢測。

假設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中,不會刪除。

上圖則展示了一個更加複雜的雙花檢測。

前提條件和上一個一樣,假設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結構,其中為了簡單起見將前面幾張圖裡的錢包地址塊省略展示。

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

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

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

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

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

輕錢包和全節點錢包還在計劃之中。

Golang版本實現已經著手進行基礎開發,C++版本也在進行相關基礎開發。

Python版本用於教學和入門XDAG開發,目前已經有了Python的礦機實現。

當前XDAG社區急需更多貢獻者加入,也急需得到更多人的幫助。

幫助XDAG的方式有分享傳播XDAG相關知識、和社區一起討論各種提議、向社區報告問題、幫助社區做本地化翻譯、直接參与XDAG項目開發貢獻代碼!

感謝所有的曾經幫助過和現在正在幫助XDAG的開發者們,他們有

Daniel, Evgeniy, Frozen, sgaragaghu, trueserve, amazingMan2017, ssyijiu, Solar, Wendy, czslience, rubencm, kbs1

感謝所有的礦工、礦池主和所有其他的貢獻者們!

有他們的無私奉獻才有XDAG這樣一個項目存在!

jq.qq.com/? (二維碼自動識別)

可以掃碼關注微信公眾號獲取最新XDAG進展

掃碼加入開發者QQ群,共同討論XDAG技術路線。

感謝計然研究提供這樣一個同大家交流的機會!

大家有什麼問題可以現在提問或微信交流。

Q&A:

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

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

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

A2: 排序規則就比較複雜了。。可能單獨得需要一個時間來分享


推薦閱讀:
相关文章