日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Conflux的自我进化:从DAG到树图| 对话伍鸣

發(fā)布時間:2024/3/13 编程问答 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Conflux的自我进化:从DAG到树图| 对话伍鸣 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.


Conflux的身份不再是DAG,它是樹圖。


受訪者:Conflux CTO 伍鳴

采訪 &.撰文:李畫


這是一次特別的采訪。


采訪前我們想要Conflux的首席技術(shù)官伍鳴博士幫我們解答的疑問是:「DAG」與「鏈」的本質(zhì)區(qū)別是什么?我們?yōu)槭裁匆盟?#xff1f;它自身的局限性又在哪里?


采訪時伍鳴卻告訴我們,Conflux已不再把自己歸類為DAG,它的新身份是樹圖(Tree-Graph)。


不過我們的疑問依然被解答了,因為最有趣的地方就在于,Conflux從DAG類別變更為樹圖類別的原因,恰恰能回答采訪前我們想要弄明白的那三個問題。甚至因為引入了樹圖概念,我們能從一個更高的角度來理解這些問題。


區(qū)塊鏈賬本的結(jié)構(gòu)反映的是區(qū)塊與區(qū)塊之間的連接關(guān)系,而這種連接關(guān)系是由「指針」決定的。更科學(xué)的賬本分類方法不是基于它的形狀,而是基于其「指針」的類別、數(shù)量。


我們的采訪對象伍鳴是Conflux的聯(lián)合創(chuàng)始人,在加入Conflux之前任微軟亞洲研究院系統(tǒng)組資深研究員,主要的研究方向為分布式事務(wù)處理系統(tǒng)、圖計算引擎和人工智能平臺,他在分布式系統(tǒng)的設(shè)計和實現(xiàn)上擁有豐富的專業(yè)知識。


Conflux是使用樹圖結(jié)構(gòu)的公有鏈,其團(tuán)隊成員大多擁有美國一流大學(xué)的留學(xué)背景和在硅谷、華爾街的多年工作經(jīng)驗,有著突出的科研能力與技術(shù)能力。姚期智院士是Conflux團(tuán)隊的首席科學(xué)家。



 01 


鏈、DAG、樹圖:結(jié)構(gòu)不同能力不同?



問:DAG、樹圖這些非鏈?zhǔn)降馁~本結(jié)構(gòu)能被認(rèn)為是區(qū)塊鏈嗎?


伍鳴:不管是鏈、DAG,還是樹圖,我們要通過它們解決的問題其實是一樣的,我們可以用區(qū)塊鏈技術(shù)這個詞把它們概括起來。


問:鏈結(jié)構(gòu)、DAG結(jié)構(gòu)、樹圖結(jié)構(gòu)的本質(zhì)區(qū)別是什么?為什么Conflux是樹圖而不是DAG?


伍鳴:你可以認(rèn)為在鏈結(jié)構(gòu)里,每個區(qū)塊只能有一個指針,這個指針是指向其父親區(qū)塊的,那么所有區(qū)塊就會一個接一個連起來,形成一個鏈狀的結(jié)構(gòu)。


DAG結(jié)構(gòu)概括來講是指每個區(qū)塊有多于一個的指針,可以指向多于一個的其他區(qū)塊,形成的是一個有向無環(huán)的圖狀結(jié)構(gòu)。


Conflux的樹圖結(jié)構(gòu)不同于鏈或DAG只有一類指針,它的每個區(qū)塊都有兩種指針,一種指針指向父親區(qū)塊,且只能有一個父親,與傳統(tǒng)的鏈?zhǔn)浇Y(jié)構(gòu)一樣;一種指針指向引用區(qū)塊,需要引用多個區(qū)塊,表達(dá)不同區(qū)塊間的happens-before(先行發(fā)生)關(guān)系。


所以,在 Conflux 里有兩種類型的邊,父邊(父親指針確定的邊)和引用邊(引用指針確定的邊)。如果只看父邊,賬本的結(jié)構(gòu)是一棵樹;如果同時看父邊和引用邊,賬本的結(jié)構(gòu)是一個圖。樹圖結(jié)構(gòu)就是指在圖中包含了一棵樹的這樣一種結(jié)構(gòu)。


我們覺得如果繼續(xù)叫DAG 可能會讓大家產(chǎn)生誤解,因為目前其他基于DAG的區(qū)塊鏈系統(tǒng)都只有一種類型的連接區(qū)塊或交易的邊,因此有了樹圖這個概念。樹圖它更接近于Conflux賬本結(jié)構(gòu)的本質(zhì)。


問:Conflux為什么要引入兩種指針?三種不同賬本結(jié)構(gòu)的區(qū)塊鏈系統(tǒng)會有何不同?


伍鳴:三種不同賬本結(jié)構(gòu)下的區(qū)塊鏈系統(tǒng)最大的不同在于,它們對全序的支持或?qū)崿F(xiàn)方式是不一樣的。


鏈結(jié)構(gòu)支持全序,DAG結(jié)構(gòu)天然形成的是偏序,樹圖結(jié)構(gòu)支持全序。


鏈結(jié)構(gòu)中舍棄了分叉上的區(qū)塊,其主鏈上的區(qū)塊都有著唯一的父子關(guān)系,天然形成一個確定的順序,所有人都可以按照這個順序執(zhí)行區(qū)塊里的交易,所有人最后都能夠達(dá)到一個一致的狀態(tài)。


DAG結(jié)構(gòu)中天然形成的是一個偏序。偏序的意思是說如果圖中的兩個區(qū)塊之間沒有直接的邊,或者兩個區(qū)塊之間不存在一條路徑,就沒有辦法確定這兩個區(qū)塊及它們所包含的交易間的順序。


不過DAG可以通過設(shè)計為區(qū)塊排出全序,現(xiàn)有的DAG有些支持全序有些不支持全序。


樹圖結(jié)構(gòu)通過引入主鏈和Epoch的概念,實現(xiàn)了對區(qū)塊全序的支持,這也是Conflux有兩種指針的原因。(如何實現(xiàn)全序?qū)⒃谙乱还?jié)詳細(xì)介紹)


問:為什么要排全序,偏序會帶來什么問題?


伍鳴:一個區(qū)塊鏈系統(tǒng),如果只需要處理普通的轉(zhuǎn)賬交易,又能通過指針保證并發(fā)交易間沒有因果關(guān)系,那它也許可以用偏序。


因為這種系統(tǒng)只需要處理加減操作,而加減操作是滿足交換律和結(jié)合律的,交易的執(zhí)行順序?qū)ο到y(tǒng)狀態(tài)沒有影響,系統(tǒng)最終的狀態(tài)是一致的。


但偏序不能支持智能合約,因為智能合約是圖靈完備的,它需要表達(dá)復(fù)雜的邏輯計算,它有乘法,一旦有乘法和加法就不會滿足交換律了。


也就是說,兩筆交易A和B,先執(zhí)行A后執(zhí)行B得到的狀態(tài)與先執(zhí)行B后執(zhí)行A得到的狀態(tài)是不一樣的。偏序下兩筆交易有可能以任意的順序執(zhí)行,那么不同的礦工就會得到不同的系統(tǒng)狀態(tài),就無法取得共識。


如果一條鏈想要支持智能合約,就要支持全序。


問:既然為了實現(xiàn)全序要多做工作,為什么使用DAG或樹圖,而不是鏈結(jié)構(gòu)?


伍鳴:區(qū)塊鏈會產(chǎn)生很多分叉,鏈結(jié)構(gòu)是無法定義分叉上的區(qū)塊的執(zhí)行順序的,它只能選擇丟掉分叉。


丟掉分叉會犧牲掉一些區(qū)塊,不僅浪費了資源,還制約了吞吐率;丟掉分叉也會犧牲一些安全性,因為在最長鏈共識機制下,分叉上的區(qū)塊是不能為最長鏈共識作出貢獻(xiàn)的,比如有很多好人區(qū)塊分叉的話,這些區(qū)塊就不能用來貢獻(xiàn)最長鏈,也就不能用來貢獻(xiàn)鏈的安全,壞人可以用更少的算力攻擊這條鏈。


樹圖和實現(xiàn)了全序的DAG把分叉區(qū)塊加入到賬本中,并定義了分叉上區(qū)塊的執(zhí)行順序。


把所有的區(qū)塊都算進(jìn)來,也就讓所有區(qū)塊都貢獻(xiàn)到系統(tǒng)的吞吐率上,這使得系統(tǒng)的瓶頸就不再是共識機制,而是網(wǎng)絡(luò)本身。只要網(wǎng)絡(luò)足夠快,系統(tǒng)的性能就還能再高,從而使得整個系統(tǒng)在不犧牲安全性的同時獲得更高的吞吐率。



 02 


Conflux如何實現(xiàn)全序



問:Conflux如何實現(xiàn)全序?


伍鳴:Conflux是通過引入主鏈這個概念最終實現(xiàn)全序的。我們之前講過每個區(qū)塊都有兩種指針,其中一種是指向父親區(qū)塊的,這種指針決定的賬本結(jié)構(gòu)是一棵樹,通過這棵樹可以確定一條主鏈。


具體實現(xiàn)上,Conflux采用了Ghost和Epoch這兩種規(guī)則。Ghost規(guī)則用來確定主鏈,Epoch規(guī)則用來確定區(qū)塊的順序,兩者結(jié)合,就能實現(xiàn)區(qū)塊的全序。


問:Ghost如何確定主鏈?


伍鳴:Ghost從創(chuàng)世區(qū)塊開始,迭代的去從孩子區(qū)塊中選擇放在主鏈上的下一個區(qū)塊,選擇規(guī)則是挑選擁有最大子樹的孩子區(qū)塊為主鏈區(qū)塊。


如下圖所示,區(qū)塊A和區(qū)塊B是創(chuàng)世區(qū)塊的兩個孩子區(qū)塊。A子樹有6個區(qū)塊,B子樹有5個區(qū)塊,所以選擇區(qū)塊A作為緊接著創(chuàng)世區(qū)塊的主鏈上的區(qū)塊。根據(jù)同樣的規(guī)則,把區(qū)塊C,E,H,都選擇進(jìn)了主鏈。


(圖中實線箭頭指向父親區(qū)塊,虛線箭頭指向引用區(qū)塊)


問:Epoch如何實現(xiàn)對區(qū)塊的排序?


伍鳴:Conflux中的每個新區(qū)塊在產(chǎn)生時,除了選擇主鏈(該區(qū)塊觀察到的主鏈)上的最后一個區(qū)塊作為自己的父親區(qū)塊外,還必須把所有自己觀察到的但還沒有被其他區(qū)塊引用的區(qū)塊引用起來,表達(dá)不同區(qū)塊之間的happens-before的關(guān)系。


如上圖所示,如果一個機器節(jié)點在產(chǎn)生區(qū)塊E的時候,發(fā)現(xiàn)系統(tǒng)中已經(jīng)有了區(qū)塊D,而且這個時候區(qū)塊D還未被任何其他區(qū)塊引用,那么區(qū)塊E就把自己的引用指針指向區(qū)塊D,也就是說在區(qū)塊E和區(qū)塊D之間加上一個有向的引用邊,表示D是在E之前產(chǎn)生的。


主鏈上的每一個區(qū)塊確定一個Epoch。在分叉上的區(qū)塊屬于哪個Epoch,是由第一個產(chǎn)生在它之后的主鏈區(qū)塊所在的Epoch決定的。比如區(qū)塊D屬于Epoch E,因為D最先被E引用,所以產(chǎn)生在E之前,但是D并不產(chǎn)生在C之前。


問:在同一個Epoch內(nèi),區(qū)塊間的順序是如何確定的?


伍鳴:在每一個Epoch內(nèi)部,Conflux用拓?fù)渑判虼_定區(qū)塊間的順序。如果出現(xiàn)平局,再根據(jù)區(qū)塊的哈希值來排序。


如此一來,通過Ghost規(guī)則確定主鏈,通過Epoch規(guī)則確定區(qū)塊的大體順序,通過拓?fù)浜凸E判驅(qū)崿F(xiàn)同一Epoch內(nèi)區(qū)塊的順序,最終,Conflux的樹圖結(jié)構(gòu)賬本提供了一個一致的區(qū)塊全序。



 03 


DAG和樹圖引發(fā)的思考



問:如果多個節(jié)點同時出塊,這些區(qū)塊又都有效,會不會同一時間段產(chǎn)生大量區(qū)塊?這樣一來,每個區(qū)塊中引用指針占的空間會不會變得很大??


伍鳴:不會的,實際上整個系統(tǒng)的出塊率是固定的,我們會動態(tài)的去調(diào)整出塊難度,出塊率很高,我們就增加難度把它降下來,出塊率很低,我們就減少難度讓它增上去。


問:如果多個節(jié)點同時出塊,并發(fā)區(qū)塊中應(yīng)該會包含相同的交易,怎么解決重復(fù)打包交易的問題?


伍鳴:Conflux采用的是混合策略(Mixed-Strategy,博弈論中的一種策略),礦工們根據(jù)交易費的選擇權(quán)重隨機地從交易等待池中選取交易。隨機是比較抽象的一個描述,它實際上很復(fù)雜,礦工會跟隨這種隨機方法選取交易,讓自己打包交易獲得的回報最大化。


當(dāng)然不可能完全避免重復(fù),交易池的交易越多重復(fù)概率越小,在正常情況下可能有30%左右的交易重復(fù)。如果交易池里的交易很少,比如說最極端的情況,只有一個交易,那當(dāng)然是會重復(fù)的,因為所有人都會打包這個交易。


問:如果多個節(jié)點同時出塊,有沒有可能發(fā)生交易沖突的問題?


伍鳴:一般我們說的交易沖突是指上一個交易把錢花光沒有余額了,但后面還有交易。Conflux通過區(qū)塊全序保證了交易的執(zhí)行順序,就會避免這個問題,如果發(fā)生在前邊的交易把錢花光了,就會讓它后邊的交易變?yōu)闊o效。


另一種情況是相同的交易有可能被打包到不同的區(qū)塊里,在這種情況下,Conflux只接受在區(qū)塊全序中排在最開始位置的這筆交易,而把后面的交易變?yōu)闊o效。


問:因為賬本結(jié)構(gòu)的復(fù)雜性,會不會出現(xiàn)不同節(jié)點賬本不一致的情況?


伍鳴:肯定是有的,但經(jīng)過一段時間以后就能確定賬本。有一個公式可以算出主鏈區(qū)塊被統(tǒng)一的概率,大概五、六個Epoch后,賬本就能一致。


問:樹圖在51%攻擊上的安全性是怎么樣的?


伍鳴:Conflux中只要主鏈定了,交易的全序就定了,攻擊者想發(fā)動51%攻擊、想改變交易的順序,就必須改變主鏈的順序。


因此在51%攻擊上,樹圖的安全性和Ghost鏈的安全性是差不多的。


Ghost規(guī)則比最長鏈規(guī)則安全,Ghost看的是子樹的權(quán)重,把分叉上的區(qū)塊也考慮到了,所有的區(qū)塊、所有的算力都貢獻(xiàn)到主鏈的選擇上,能夠嚴(yán)格地滿足51%這個概念。但最長鏈規(guī)則沒有考慮分叉鏈上算力的浪費。


問:在對礦工的激勵機制上,樹圖跟鏈?zhǔn)浇Y(jié)構(gòu)有什么不同?


伍鳴:有一種情況是樹圖中才會出現(xiàn)的。樹圖需要區(qū)塊去引用其他區(qū)塊,表達(dá)不同區(qū)塊之間的happens-before的關(guān)系,那有的區(qū)塊可能不去正常引用其他區(qū)塊,就是說看到其他區(qū)塊也不引用。這是我們不希望看到的情況。


另一種發(fā)生在樹圖上的欺騙行為在傳統(tǒng)的鏈上也會發(fā)生,就是產(chǎn)生區(qū)塊但不廣播,偷偷挖一個私有的鏈,等到某個時機再放出去。


在這兩種情況下,這些不正常區(qū)塊的并發(fā)區(qū)塊會變得很多,因為它們和其他區(qū)塊之間缺少happens-before關(guān)系。Conflux以此為依據(jù)去懲罰這兩種行為:并發(fā)區(qū)塊的個數(shù)越多,礦工獲得的獎勵越少。



 04 


結(jié)束語



鏈?zhǔn)浇Y(jié)構(gòu)放棄了分叉上的區(qū)塊,這樣做雖然犧牲了一定的吞吐率,卻保證了交易的全序。DAG把分叉上的區(qū)塊都納入到賬本中,這樣做雖然不再浪費算力,卻引入了一個如何對區(qū)塊排序的難題。


有的DAG干脆不對區(qū)塊排序,因為在一些應(yīng)用場景下,交易的全序可能并不那么重要,比如IOTA。其他DAG則需要設(shè)計一種方法,實現(xiàn)對區(qū)塊的排序。比如Byteball 、Hashgraph。


當(dāng)我們深入地去了解不排全序的DAG、排全序的DAG、排全序DAG的不同排序方法,以及這些DAG采用的不同賬本結(jié)構(gòu),就會發(fā)現(xiàn)它們是截然不同的。


或許正因如此,Conflux不再把自己歸類為DAG,而具有兩種不同類別指針的它也確實與DAG有著不小的區(qū)別,樹圖也許更接近其本質(zhì)。


于是,這次帶著弄清DAG與鏈的差別開始的采訪,最后得出的結(jié)論是:不同DAG項目的差別,比DAG與鏈的差別都大。


推薦閱讀:

豐水期不是礦場和礦商的救命稻草

區(qū)塊鏈該不該追求效率

波場正在引入審查

SEC明確代幣屬于證券的評估標(biāo)準(zhǔn)

R3黯然史

從貨幣經(jīng)濟(jì)學(xué)視角穿透穩(wěn)定幣

摩根大通背后的清算體系與區(qū)塊鏈網(wǎng)絡(luò)

揭秘頂級區(qū)塊鏈投資機構(gòu)Polychain

為什么匿名幣將統(tǒng)治下一個牛市?

官方社群已開通,歡迎加小編微信。

< END >




總結(jié)

以上是生活随笔為你收集整理的Conflux的自我进化:从DAG到树图| 对话伍鸣的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。