『壹』 有誰知道能解釋一下有向無環圖(DAG)么怎麼用程序做出來,及怎麼應用到經濟學實證上
我們說區塊鏈目前還不成熟,有各種各樣的問題,比如說處理速度慢、手續費高昂、存在安全隱患等等,這些都是用戶最直觀的體驗,體驗不是太好。區塊鏈還有一個問題,那就是高並發問題。
高並發問題是怎麼回事呢,我們簡單說一下。高並發是計算機領域的問題,簡單來講,高並發問題就是系統無法順利同時運行多個任務。
很多任務同時運行,一大堆用戶涌進來,系統承受不住這么多的任務,會出現高並發問題,你的系統就卡住了,就好比春運時候,12306系統總是卡住,有可能就是高並發問題造成的。
傳統互聯網尚且存在高並發問題,區塊鏈網路自然也存在這個問題,畢竟區塊鏈的成熟程度比起傳統互聯網,還有很大的差距。但是,如果沒有安全、可靠和高效的公鏈,整個區塊鏈產業的發展都將受到嚴重製約,應用落地也是空談。
在這種背景下,DAG 技術就被提出來了,DAG 的全稱是「Directed Acyclic Graph」,中文翻譯為「有向無環圖」。
DAG有向無環圖是怎麼回事呢,它到底能起到什麼作用呢?我們下面解釋一下。
一、DAG:一個新型的數據結構
DAG,中文名字叫「有向無環圖」,從字面意思看,「有向"就是說它是有方向的,
「無環」就是說它是沒有環路的、不能形成閉環的。所以,DAG其實是一種新型的數據結構,這個數據結構是有方向的,同時又是不能形成閉環的。
傳統區塊來講,我們總是以「區塊」為單位,一個區塊里往往包含了多筆交易信息。而在DAG中,沒有區塊的概念,而是以「單元」為單位,每個單元記錄的是單個用戶的交易,組成的單元不是區塊,而是一筆筆的交易,這樣一來,可以省去打包出塊的時間。
簡單來說,區塊鏈和DAG有向無環圖最大的區別就是:區塊鏈是一個接一個的區塊來存儲和驗證交易的分布式賬本,而DAG則是把每筆交易都看成一個區塊,每一筆交易都可以鏈接到多個先前的交易來進行驗證。
二、DAG 的工作原理
傳統區塊鏈上,就拿比特幣來講,它是單鏈式的結構,區塊與區塊之間按照時間戳的先後順序排列開來(如圖一),數據記錄在一條主鏈上。用不太恰當的比喻來講,這個
「單鏈式」結構是一條一字排列的鏈。
區塊鏈只有一條單鏈,打包出塊就無法並發執行。新的區塊會加入到原先的最長鏈之上,所有節點都以最長鏈為准,繼續按照時間戳的順序無限蔓延下去。而對於DAG來講,每個新加入的單元,不僅只加入到最長鏈的一個單元,還要加入到之前所有的單元(如圖二)。
舉個例子:假設我發布了一個新的交易,此時DAG結構已經有2個有效的交易單元,那麼我的交易單元會主動同時鏈接到前面的2個之中,去驗證並確認,直到鏈接到創世單元,而且,上一個單元的哈希會包含到自己的單元裡面。
換句話說,你要想進行一筆交易,就必須要驗證前面的交易,具體驗證幾個交易,根據不同的規則來進行。這種驗證手段,使得DAG可以非同步並發的寫入很多交易,並最終構成一種拓撲的樹狀結構,極大地提高擴展性。
依據DAG有向無環圖,每一筆交易都直接參與了維護全網。當交易發起後,直接廣播全網,跳過礦工打包區塊階段,這樣就省去了打包交易出塊的時間,提升了區塊鏈處理交易的效率。
隨著時間遞增,所有交易的區塊鏈相互連接,形成圖狀結構,如果要更改數據,那就不僅僅是幾個區塊的問題了,而是整個區塊圖的數據更改。DAG這個模式相比來說,要進行的復雜度更高,更難以被更改。
總結一下,DAG作為一種新型的去中心化數據結構,它屬於廣義區塊鏈的一種,具備去中心化的屬性,但是二者的不同之處在於:
區塊鏈組成單元是Block(區塊),DAG組成單元是TX(交易)。
區塊鏈是單線程,DAG是多線程。
區塊鏈所有交易記錄記在同一個區塊中,DAG每筆交易單獨記錄在每筆交易中。
區塊鏈需要礦工,DAG不需要礦工。
三、 DAG 的代表:IOTA
DAG當前的代表項目,最知名的無疑就是 IOTA。可以說,正是因為IOTA這個幣種在 2017年下半年沖進市值排行第四位,才使人們真正認識到了它的底層技術:DAG有向無環圖。
IOTA在DAG有向無環圖的基礎上提出了「纏結」概念,在IOTA裡面,沒有區塊的概念,共識的最小單位是交易。每一個交易都會引用過去的兩條交易記錄哈希,這樣前一交易會證明過去兩條交易的合法性,間接證明之前所有交易的合法性。這樣一來, 就不再需要傳統區塊鏈中的礦工這樣少量節點來驗證交易、打包區塊,從而提升效率,節省交易費用。
四、 DAG 的現狀
盡管理論上來講,DAG有向無環圖能夠彌補傳統區塊鏈的一些弊端,但是目前並不成熟,應用到數字貨幣領域的時間也比較短,還比較年輕 。
它沒有像比特幣那般經過長達10年的時間來驗證整個系統的安全性,也沒有像以太坊那般實現了廣泛的應用場景。不過,現在有些聲音提出要採用「傳統區塊鏈+DAG」的數據結構,但是還沒有非常突出的案例,這里就不多說了。
總結一下,本節我們介紹了區塊鏈的衍生技術:DAG有向無環圖,這是一種全新的數據結構,可以對區塊鏈處理交易的效率、並發力達到顯著的提升。
『貳』 什麼是DAG,DAG有發展前途嗎
DAG(Directed acyclic graph),有向無環圖,是計算機領域一個常用的數據結構,因為獨特的拓撲結構所帶來的一些特性,經常被用到處理動態規劃,導航中尋求最短路徑,數據壓縮等場景中。從15年開始,區塊鏈概念被單拎出來,這之前區塊鏈還只是比特幣技術里的一個數據結構,中本聰白皮書里把block和chain連一起的時候也只是a chain of blocks 。隨著以太坊去中心化計算機的概念提出來,很多人開始把以太坊稱作區塊鏈2.0,而比特幣被歸到了區塊鏈1.0。至於區塊鏈3.0,市場上為了搶奪區塊鏈3.0的冠名權打的不可開交,沒准會是DAG。
『叄』 dag怎麼取代區塊鏈(區塊鏈取代銀行)
什麼是DAG參考ExplainingDirectedAcylicGraph(DAG),TheRealBlockchain3.0
Bitcoin視為blockchain1.0,Ethereum視為2.0,那麼3.0是什麼?DAG可能會是.
DAG,即DirectAcyclicGraph,有向無環圖.它的特點是節點有先後次序,可以有分叉,但還不會有環.DAG常用語數據處理,事務規劃,最優路徑查找,數據壓縮
bitcoin之所以效率低是因為它的POW機制.整個網路只有一個主鏈,其上的新塊只能有一個,無法同時創建多個新塊.10分鍾左右以內的所有交易記錄都被記錄到一個塊中.Ethereum也是類似,大概15-20秒產生一個新塊.
NXT是第一個想到用DAG替代blockchain單鏈表結構的組織.
有了DAG,就可以同一時間創建多個塊.
使用DAG的想法來自於側鏈(side-chain).不同類型的交易在不同的鏈上同時進行.
IoTChain(ITC),IOTA,和Byteball是沒有block概念的項目.
如果每個block只有一個transaction,那這個transaction就不用等待被打包,跳過計算hash的過程(即挖礦),直接上鏈了.
Bitcoin使用UTXO(UnspentTransactionoutput)模型.
DAG網路中,降低網路寬度是比較重要的一個課題.
由於只有transaction,沒有打包的過程,DAG比基於PoW或PoS的區塊鏈更快.
DAG網路里,沒有礦工.交易的驗證直接在交易時進行.對於用戶來說這意味著交易可以瞬間完成.
DAG可以有效降低交易費.
IoTChain(ITC)所基於的DAG的TPS達到10,000.
XDAG(匕首幣)——未來pow+dag貨幣之王
Dagger(代幣簡稱XDAG)是一個全新的基於有向無環圖(DAG)的加密貨幣,替代了區塊鏈技術。沒有預挖,也沒有ICO計劃,是一個真正由社區推動、公平開放的項目。而且不同於其它DAG方向的幣,Dagger可以進行挖礦,目前CPU、GPU都可以進行挖礦。
Xdag總量為4,294,967,296個(2的32次方),分160年挖完,明年預計大幅度減產,總量減少至8億。一天產量為138萬,每64秒產生一個塊,一個塊1024枚Xdag。目前是4年遞減,每隔4年挖出礦的數量減半。目前Xdag已經挖出近2億枚,流通量約一億八千枚。
Xdag於2017年11月被設計出來,內部測試兩個月後,也就是2018年1月正式上線主網。它的作者是俄羅斯莫斯科國立大學的高級研究員,數學研究背景。Xdag的目標是創建一個能夠允許每秒進行成千上萬筆交易的去中心化的支付系統。
Dagger(XDAG)是全世界第一個實現pow+dag的加密貨幣,既擁有pow的去中心化和高安全性,又加入了dag的高並發,從bitcointalk.com創世以來,就受到全世界的關注,被譽為dag中的比特幣。每一個塊包含一個交易,塊同時也是一個地址。Xdag是僅可以通過挖礦獲取,目標是成為全球性的超主權支付貨幣。完全沒有預挖也沒有ICO,主網路已經穩定運行五個月,算力上漲異常迅速。
DAG或直接非循環是在分布式、分散式環境中的人之間發送數據的另一種方法。這是在沒有區塊鏈的情況下完成的,可以提供更高的可擴展性。目前來看,XDAG網路在POW這種目前最優的去中心化方案下,依然能夠擁有1000~10000tps,且整個轉賬系統零手續費。
XDAG(匕首幣)已經於2018年04月22日,晚上6點整(UTC+8),正式登陸Coinbat.com。此為國內交易量最大交易所。
區塊=交易=錢包
Xdag中所有的錢包地址、交易記錄均是塊(Block)。因為這種特性,所有的錢包都需要在網路上有獨一無二的block。換而言之,你不可以向不存在的wallet轉賬。這意味著,不用再擔心像其他加密貨幣一樣,打到黑洞地址的情況。之前加密貨幣最不人性的一點就是容易手誤打到錯誤地址。這一切在xdag中,不會出現。因為只有已經存在的錢包,才在xdag網路上有獨一無二的區塊。同時Xdag轉賬是沒有任何費用的。
第一個基於DAG技術可挖礦(PoW)的公鏈
Xdag是採用PoW(工作量證明)的DAG技術,是目前業界唯一個可以進行挖礦的DAG網路。相較於區塊鏈技術Xdag有更高的TPS,同時相對於其他DAG技術,Xdag則採用已經廣為認可的PoW共識機制,確保去中心化和公平性。
解決了雙花問題
在Xdag中,主塊(MainBlock)在每個幀間隔(FrameTime)中生成,Xdag中所有交易均是塊(Block),當發生交易產生交易塊(TransactionBlock)發送到主網中,見證者會按照規則驗證交易,並將交易塊鏈接到主塊上,一個交易塊會有自己的鏈接關系,見證者會依據規則確保先到的交易塊被鏈接到主塊,後到的塊將不會被鏈接到主塊,只有被主塊鏈接的塊才是有效的。
高TPS,轉賬速度快
到目前為止,整個系統已經穩定運行接近5個月,轉帳速度極快,基本都在幾十秒即可到達,遠遠超過ETH、BTC。之後可以縮短到十幾秒。
目前最好的不可能三角解決方案
Xdag通過pow來保證去中心化和安全性,同時保留了dag的高並發。這是目前市場最完美的不可能三角(高並發、安全性、去中心化不可兼得),具備非常大的區塊鏈三點零潛質。
目前xdag的開發由社區自治,目前開發進度正常,版本更新快。前陣子曾因為算力上漲導致主網出現過兩次不同步的現象,經過社區開發人員的開發,目前項目已經很大提升了其穩定性。現在轉移開發重點為RPC介面、移動錢包的開發。RPC介面開發完成後意味著能實現交易平台自動沖提功能,屆時也會一些交易平台進行對接,如果能夠順利上線一些流通性更好的平台,對項目本身的意義也是非常正面的。也許在未來,會有更科學的技術能夠實現點對點交易、安全、匿名、高效的完美整合。但至少在接下來的一段時間里,XDAG絕對會是發展潛力無窮的金子。
xdag打賞address:ZBJ9BLTG+knstcKzwSiNfof9hDoDtdko
為什麼要用DAG作為底層技術?相比別的以太坊和比特幣底層技術,其優勢是什麼?DAG區塊鏈與傳統區塊鏈工作機制不同之處在於,後者需要礦工完成工作量證明(PoW)來執行每一筆交易,而DAG區塊鏈能擺脫區塊鏈的限制來完成這樣的操作。相反的是,在DAG區塊鏈中一筆交易接著另外一筆,這意味著一筆交易能夠對下一筆交易提供證明,由此一直排序下去。這些交易之間的連接就是DAG,就像區塊通過哈希值來向整條區塊鏈提供它們的名字一樣。
在傳統塊鏈式區塊鏈中,每筆交易要花費不少時間,而對於DAG區塊鏈來說,交易時間將變得微不足道
什麼是DAG區塊鏈技術DAG全稱是「有向無環圖」,沒有區塊概念,不是把所有數據打包成區塊,再用區塊鏈接區塊,而是每個用戶都可以提交一個數據單元,這個數據單元里可以有很多東西,比如交易、消息等等。數據單元間通過引用關系鏈接起來,從而形成具有半序關系的DAG(有向無環圖)。DAG的特點是把數據單元的寫入操作非同步化,大量的錢包客戶端可以自主非同步地把交易數據寫入DAG,從而可以支持極大的並發量和極高的速度。同時,使用DAG技術的TrustNote還支持聲明式智能合約,聲明式的智能合約要表達的意思是可以直接按照用戶想要的結果去寫、去描述,以很簡單的語言,讓大家都能看懂的語言去描述他要乾的事情。
截止到2017年年底,「高流量應用」越來越多,除了主流電商平台外,還有直播平台、P2P理財、今日頭條、陌陌等嶄露頭角,如果「高流量應用」與DAG區塊鏈技術結合,將會給行業帶來哪些變革呢?除區塊鏈自身的特點去中心化、分布式賬本、不可篡改之外,DAG區塊鏈技術不但可以支持高並發,結合雙層共識機制,使用工作量證明共識演算法,還能夠防止「雙花」問題。
那麼,DAG如何支持高並發的呢?第一,數據不像比特幣和以太坊一樣強同步,而是弱同步,允許節點在同一時刻數據不一樣,數據可以有一些微小的差別。第二,可以通過數據單元之間的引用來完成交易的確認,就是後面發生的單元去引用前面的單元,這樣不需要我們把數據傳給礦工,整個過程都是由自己去完成的,這個過程很快。DAG是解決高並發比較優美的方法,比起之前的閃電網路,還有其他一些方面,DAG有其先天優勢。
再來看看DAG是如何防止「雙花」?在有向圖里如果能選出一個MainChain,這個時候會發現所有圖裡面的節點都可以用一種方法來給它做排序,把這個序號連接起來在一排,這張圖將會變成跟區塊鏈一樣的序列結構,就是排完序的節點,而且每個節點是一個交易,而不是一個區塊。所以,確定了主鏈,通過主鏈,可以形成全序。最後達到的結局就是在某一個邏輯狀態里,交易還是被排序了,這是DAG最關鍵核心的部分。
「高流量應用」是隨著節點數和交易數的增加平滑擴展,當這個節點數超過1億或交易數超過並發100萬時,DAG的特性剛好是交易越多越快,節點越多越快。
『肆』 『學概念找員外』有向無環圖DAG的用途
有向無環圖(DAG, Directed Acyclic Graph) :是一個無迴路的有向圖。如果有一個圖,從A點出發到B點,然後經過C點,最後可以順著方向回到A,形成一個閉環,那麼這個圖就不是非向無環圖。如果將從C到A的邊方向改為從A到C,則變成有向無環圖。如圖1 和 圖2。
看到這兩幅圖,應該可以明白了,當然這個圖是很簡單的,只有三個點,事實上可能是由百萬千萬或者更多個點組成的圖。有向無環圖就是從一個圖中的任何一點出發,不管走過多少個分叉路口,都沒有回到原來這個點的可能性。
拓撲排序 :就是一個有向無環圖的所有定點的線性序列。且這個序列必須滿足這兩個條件:
這個東西,是比較難理解,再上圖說話吧。比如在這個有向無環圖中,它用拓撲排序,該怎麼進行呢?
最後,一個完整的拓撲排序就完成了,結果為:1、2、4、3、5。
大家都知道,在比特幣系統中,固定約十分鍾出一個塊,而且一旦打包成功一個區塊,這個區塊的信息還必須同步到其他的所有區塊上面去,這是極其耗費資源和時間的。同時一個塊裡面大概能容納3000筆交易,也就意味著10分鍾才能交易成功3000筆。這個交易速度實在是滿足不了用戶的需求,所以為了解決比特幣這個問題,出現了各種分叉幣,也可謂是把比特幣搞的亂七八糟了。後來以太坊問世後,基於比特幣的基礎上,交易速度提高了不少,每秒交易可達到20筆左右,但是任然有多次的以太坊擁堵事件,證明這個交易速度還遠遠不夠。
在比特幣系統中,如果可以改變51%的節點的記錄數據,那麼就實現了惡意攻擊。然而現在比特幣的大部分算力掌握在少數幾個較大的礦廠手裡,雖然大家都有共識,不會發起惡意攻擊,但是不代表不會有意外事件發生。
隨著計算機硬體的不斷迭代升級,量子計算機的問世,那麼比特幣的加密演算法還會有用嗎?會不會被破解掉?雖然比特幣的哈希演算法可以實時調整難度,但是到底能承受多大的考驗,員外是說不清的。
比特幣用於大額的跨境轉賬或者交易等用途,還是挺實用的,但是誰會去用比特幣購買小件商品?顯然是不可能的,交易手續費就會讓你心疼半天,然後還得再等半天的確認時間。
在區塊鏈的應用上使用了DAG圖之後,可以使得出塊速度變快,因為DAG圖中的每個頂點都是一個在某一時間點打包完成的區塊。與傳統的公鏈一次性只能產出一個區塊來比,DAG的不同節點都可以自己來生成區塊,然後這個區塊只要選擇好自己的下一個或者多個區塊作為自己的子區塊就好了。僅僅是在這一點上,出塊速度就會高出比特幣多個量級,交易速度簡直可以快的飛起。
基於DAG的數據結構來說的話,對於裡面的每個節點來說,因為與之相連的節點很少,而且是有方向性的,只能往前不能後退,所以都不需要再等大量的其他節點達成共識後,再同時確認下一筆交易了,避免了因網路延遲和數據同步造成的大量時間浪費。所以,使用DAG記賬的節點的延展性可得到大幅度提升。
從上面這張圖中,可以看到DAG的每一個節點都可以向下連接任意多個新的節點,這個有什麼用呢?如果在這一個區塊內部交易數據或者與之相連的下一步的交易數據也是過多的話,那麼就可以分成足夠多個區塊來共同分擔區塊壓力,從而可以提高交易的吞吐量。相比於比特幣這樣的系統每次只能打包一個區塊來說,簡直是完勝。
沒有一個東西是完美的,有優勢就有缺點,所以DAG的缺點目前在安全問題上面,主要是雙花和影子鏈攻擊。這個問題員外目前還沒有找到足夠好的答案,只能後續再說了。
本文參加優享優質經驗徵集計劃,經驗即價值,優享為成長買單
全球首個去中心化經驗價值共享平台「優享」開啟今夏最強空投!注冊即送UX,最高5000UX,更多價值,等你發現!注冊鏈接
『伍』 以太坊多節點私有鏈部署
假設兩台電腦A和B
要求:
1、兩台電腦要在一個網路中,能ping通
2、兩個節點使用相同的創世區塊文件
3、禁用ipc;同時使用參數--nodiscover
4、networkid要相同,埠號可以不同
1.4 搭建私有鏈
1.4.1 創建目錄和genesis.json文件
創建私有鏈根目錄./testnet
創建數據存儲目錄./testnet/data0
創建創世區塊配置文件./testnet/genesis.json
1.4.2 初始化操作
cd ./eth_test
geth --datadir data0 init genesis.json
1.4.3 啟動私有節點
1.4.4 創建賬號
personal.newAccount()
1.4.5 查看賬號
eth.accounts
1.4.6 查看賬號余額
eth.getBalance(eth.accounts[0])
1.4.7 啟動&停止挖礦
啟動挖礦:
miner.start(1)
其中 start 的參數表示挖礦使用的線程數。第一次啟動挖礦會先生成挖礦所需的 DAG 文件,這個過程有點慢,等進度達到 100% 後,就會開始挖礦,此時屏幕會被挖礦信息刷屏。
停止挖礦,在 console 中輸入:
miner.stop()
挖到一個區塊會獎勵5個以太幣,挖礦所得的獎勵會進入礦工的賬戶,這個賬戶叫做 coinbase,默認情況下 coinbase 是本地賬戶中的第一個賬戶,可以通過 miner.setEtherbase() 將其他賬戶設置成 coinbase。
1.4.8 轉賬
目前,賬戶 0 已經挖到了 3 個塊的獎勵,賬戶 1 的余額還是0:
我們要從賬戶 0 向賬戶 1 轉賬,所以要先解鎖賬戶 0,才能發起交易:
發送交易,賬戶 0 -> 賬戶 1:
需要輸入密碼 123456
此時如果沒有挖礦,用 txpool.status 命令可以看到本地交易池中有一個待確認的交易,可以使用 eth.getBlock("pending", true).transactions 查看當前待確認交易。
使用 miner.start() 命令開始挖礦:
miner.start(1);admin.sleepBlocks(1);miner.stop();
新區塊挖出後,挖礦結束,查看賬戶 1 的余額,已經收到了賬戶 0 的以太幣:
web3.fromWei(eth.getBalance(eth.accounts[1]),'ether')
用同樣的genesis.json初始化操作
cd ./eth_test
geth --datadir data1 init genesis.json
啟動私有節點一,修改 rpcport 和port
可以通過 admin.addPeer() 方法連接到其他節點,兩個節點要要指定相同的 chainID。
假設有兩個節點:節點一和節點二,chainID 都是 1024,通過下面的步驟就可以從節點二連接到節點一。
首先要知道節點一的 enode 信息,在節點一的 JavaScript console 中執行下面的命令查看 enode 信息:
admin.nodeInfo.enode
" enode://@[::]:30303 "
然後在節點二的 JavaScript console 中執行 admin.addPeer(),就可以連接到節點一:
addPeer() 的參數就是節點一的 enode 信息,注意要把 enode 中的 [::] 替換成節點一的 IP 地址。連接成功後,節點一就會開始同步節點二的區塊,同步完成後,任意一個節點開始挖礦,另一個節點會自動同步區塊,向任意一個節點發送交易,另一個節點也會收到該筆交易。
通過 admin.peers 可以查看連接到的其他節點信息,通過 net.peerCount 可以查看已連接到的節點數量。
除了上面的方法,也可以在啟動節點的時候指定 --bootnodes 選項連接到其他節點。 bootnode 是一個輕量級的引導節點,方便聯盟鏈的搭建 下一節講 通過 bootnode 自動找到節點
參考: https://cloud.tencent.com/developer/article/1332424