區塊鏈的什麼和DAG的由來
想知道更多區塊鏈技術,請百度【鏈客區塊鏈技術問答社群】
區塊鏈系統中,區塊是由區塊頭連線,從而形成鏈狀的資料儲存結構,隨著發展,對鏈的結構提出新的模式。當然也有人認為這不是區塊鏈技術了,不過個人認為還是算是,那麼就簡單的說明DAG,理解不當請指正。
圖(Graph)是由定點的有窮非空集合和頂點之間邊的集合組成,通常表示為:G(V,E),這個表示裡G就表示一個圖,V是G的頂點的集合,E是G中邊的集合。資料結構中線性表和樹一般是一對一或者一對多的關係,圖就理解為多對多關係。
通訊鏈路的符號來標記節點間的互聯,圖是多對多的關係,在節點互聯的時候加一個方向,那就分為有向圖和無向圖。關於樹的資料結構演算法分析比較 複雜,包括遍歷,最小生成樹、最短路徑等。DAG圖稱為有向無環圖:樹、DAG圖、有向圖。
任意一個節點出發,根據方向無法回到原節點的圖就叫做有向無環圖,區塊鏈中說區塊 通過區塊頭連結,各個區塊的長鏈,並且新區塊順序產生下去。現在由些分散式系統通過DAG的儲存模式來儲存資料,且形成資料間的關聯。
去一個去中心化分散式系統中,要求資料防篡改,那資料儲存通過DAG圖的形式,允許新增新記錄作一個新單元,但需要支付一定的費用。隨著新單元的新增,每個單元,包括雜湊值,直接或間接的接收越來越多後來單元的確認。
這裡把單元也理解為父母單元,根據圖的特性,我們不能要求單獨的父子關係,只能沿著父子關係推導下去,發現多個分叉,並引用先前單元的時候,多個單元就已經出現了融合,然後就會發現DAG鏈是通過最長鏈來確認,通過每個節點多分叉的時候,因為是圖的特性,分叉後又會快速融合。
每個新單元確認先前單元,之後再確認先前單元,步步推導,這種模式中,一旦改變一個,導致hash值破壞,一旦一個單元被廣播到網路中,並且使用者開始在它上面構建單元,重新編輯這個單元所要的二次修改就和雪球一樣增長。
這種DAG模式通過單元釋出後,累計確認,沒有礦工的概念。網路中各個節點互相之間互助,新增新的單元,確認新的單元。
之前比特幣系統中提到防止雙重支付的點對點數字貨幣系統,在DAG模式中通過下面方式來防止雙重支付:
1.如果節點惡意釋出一樣順序的兩個單元,不管這兩個單元輸出中有沒有一樣的字元按照全網總順序處理,後續單元無效。
2.如果使用者按照協議,還是嘗試同一輸出兩次排序後生成單元,那麼就按照本身順序,晚生成單元無效。
3.兩個一樣輸出的單元,沒有先後順序,那麼在整個DAG系統中,建立總順序後,在總順序中出現早的確認,晚的無效。
4.設定一個總順序的定義:相同地址釋出超過一個單元,那麼要求每個後續單元包含所有先前單元。這就理解,你要釋出一組單元,你先給這些單元排好順序。
5.節點嘗試使用兩個一樣的輸出的單元的時候,那麼這兩個單元中一個包含另一個單元的時候,並且有一個先後順序,那麼直接拒絕後面的單元。
最後說下為什麼有人認為DAG不是區塊鏈,又有人認為是,因為在DAG中有一個主鏈的概念。
人們將他們的新單元連線到略小的最近單元上,意味著DAG僅在一個方向上增長,所有的單元要麼將直接位於這條我們稱為主鏈的鏈上,要麼沿用DAG的邊緣從相對少量的躍點到達,就像一條連線著側面道路的公路。
好了,今天就講到這裡,也許由錯誤,希望大家指出。