Conflux共識(shí)詳解

1. 簡(jiǎn)介

?Conflux利用DAG結(jié)構(gòu)并行出塊提升比特幣性能何恶。在800個(gè)亞馬遜EC2上部署2W個(gè)全節(jié)點(diǎn),吞吐量高達(dá)6400筆每秒嚼黔,處理速度為5.76GB/h细层。

?中本聰共識(shí):一次產(chǎn)生一個(gè)區(qū)塊,一個(gè)區(qū)塊接著一個(gè)區(qū)塊形成鏈?zhǔn)浇Y(jié)構(gòu)

?Conflux默認(rèn)出塊的時(shí)候交易不沖突唬涧,允許并發(fā)出塊疫赎;后一個(gè)區(qū)塊必須指向前一個(gè)區(qū)塊,形成DAG圖碎节。如何保證不可逆轉(zhuǎn)呢捧搞?選擇一條主鏈,對(duì)區(qū)塊鏈進(jìn)行拓?fù)渑判蛞源_定所有區(qū)塊的編號(hào)狮荔,將區(qū)塊從DAG結(jié)構(gòu)變成串聯(lián)結(jié)構(gòu)胎撇;因此,conflux使用修改后的基于鏈的中本聰共識(shí)來(lái)解決鏈?zhǔn)焦沧R(shí)問(wèn)題殖氏。

?在20Mbps的網(wǎng)絡(luò)帶寬限制下晚树,Conflux每5秒可以處理4MB的區(qū)塊。在40Mbps的網(wǎng)絡(luò)帶寬限制下雅采,Conflux每2.5秒可以處理4MB的區(qū)塊爵憎。在20Mbps的網(wǎng)絡(luò)帶寬限制下慨亲,Conflux每7.6-13.8分鐘確認(rèn)交易,處理速度為4MB/5s纲堵。在20Mbps的網(wǎng)絡(luò)帶寬限制下,Conflux每4.5-7.4分鐘確認(rèn)交易闰渔,處理速度為4MB/2.5s席函。

2.1 Conflux結(jié)構(gòu)

Gossip Network

?由于網(wǎng)絡(luò)延遲,短時(shí)間內(nèi)各個(gè)節(jié)點(diǎn)的DAG結(jié)構(gòu)內(nèi)容可能不同冈涧,Conflux的目的是維持節(jié)點(diǎn)之間的一致性茂附。

  1. Gossip Network:采用比特幣Gossip協(xié)議進(jìn)行廣播
  2. Pending Transaction Pool:采用比特幣交易池存放未處理交易
  3. Block Generator:采用Pow共識(shí)生成區(qū)塊,支持?jǐn)U展其他共識(shí)協(xié)議
  4. Local DAG State:采用DAG結(jié)構(gòu)并行出塊

2.2 Conflux共識(shí)

Conflux

兩種邊

  1. Parent Edge:每個(gè)區(qū)塊只有一個(gè)Parent Edge(實(shí)線)督弓,代表投票關(guān)系营曼。 C->A: C認(rèn)可A的交易
  2. Reference Edge:每個(gè)區(qū)塊可以有多個(gè)Reference Edge(虛線),代表區(qū)塊生成的順序愚隧。

主鏈: 不同于比特幣的longest chain蒂阱,Conflux采用Ghost協(xié)議選取主鏈,從Genesis區(qū)塊開(kāi)始狂塘,計(jì)算每個(gè)節(jié)點(diǎn)的子樹(shù)大小录煤,擁有l(wèi)argest subtree成為主鏈的一個(gè)節(jié)點(diǎn)。在圖2中荞胡,Conflux選取Genesis, A, C, E, and H作為主鏈妈踊,而不是Genesis, B, F, J, I, K。因?yàn)锳的子節(jié)點(diǎn)比B多泪漂?只看實(shí)線廊营?論文沒(méi)說(shuō)清楚,暫時(shí)認(rèn)為只看實(shí)線關(guān)系萝勤。

生成區(qū)塊:一個(gè)節(jié)點(diǎn)生成區(qū)塊的時(shí)候會(huì)計(jì)算當(dāng)前DAG圖的主鏈露筒,將主鏈的最后一個(gè)節(jié)點(diǎn)作為parent block,生成一條parent edge敌卓。通過(guò)這種機(jī)制邀窃,節(jié)點(diǎn)間更加傾向于生成一致的主鏈。然后遍歷DAG圖中沒(méi)有incoming edge的block假哎,并生成一條reference edge指向這些入度為0的block瞬捕。

Epoch: 通過(guò)pivot chain, parent edges, and reference edges將Conflux分隔成各個(gè)Epoch。如圖2舵抹,主鏈上每一個(gè)節(jié)點(diǎn)代表一個(gè)Epoch肪虎。一個(gè)Epoch中的區(qū)塊包含當(dāng)前主鏈節(jié)點(diǎn)通過(guò)parent edges和reference edges可到達(dá)的區(qū)塊并且沒(méi)有被包含在上一個(gè)Epoch中。例如 J 屬于 H 的Epoch惧蛹,因?yàn)?E 不能到達(dá) J 扇救,主鏈中 H 第一個(gè)到達(dá) J 刑枝。同理,F(xiàn)屬于E的Epoch但不屬于H的Epoch迅腔。

Block Total Order: 首先按照Epoch對(duì)節(jié)點(diǎn)進(jìn)行排序装畅。然后對(duì)同一個(gè)Epoch內(nèi)部的節(jié)點(diǎn)進(jìn)行拓?fù)渑判颉?If two blocks in an epoch have no partial order relationship, Con?ux breaks ties deterministically with the unique ids of the two blocks。例如在圖2中沧烈,區(qū)塊順序?yàn)锳, B, C, D, F, E, G, J, I, H, and K

Transaction Total Order: 交易的順序由包含這筆交易的區(qū)塊的Block Total Order確定先后順序掠兄。如果兩筆交易在同一個(gè)區(qū)塊內(nèi),按照交易出現(xiàn)的順序(appearance order)排序锌雀。在排序(deriving the orders)的時(shí)候蚂夕,Conflux會(huì)檢查交易是否沖突,如果兩筆交易發(fā)生沖突腋逆,只會(huì)保留最早出現(xiàn)的那筆交易婿牍,丟棄其他交易。

2.3 安全分析

  1. 攻擊者將Genesis block作為parent block惩歉,并生成一條parent edge指向Genesis block等脂。由于攻擊者的Block(下面簡(jiǎn)稱(chēng)AT.Block)沒(méi)有子節(jié)點(diǎn),AT.Block的Epoch由后面指向他的Future Block決定撑蚌,所以攻擊無(wú)效慎菲。因此,攻擊者想要發(fā)起重放攻擊只能節(jié)點(diǎn)主鏈一致性锨并。
  2. 攻擊者制造新的主鏈露该,這種情況的分析類(lèi)似中本聰共識(shí)。由于在網(wǎng)絡(luò)中大多數(shù)為誠(chéng)實(shí)節(jié)點(diǎn)第煮,隨著時(shí)間的推移解幼,沒(méi)有足夠的算力,攻擊者不可能修改主鏈包警。

3.算法實(shí)現(xiàn)

?在Bitcoin Core codebase v0.16.0上實(shí)現(xiàn)Conflux和GHOST撵摆。

  1. Block Header: 在Header中加入每個(gè)32字節(jié)的reference edges的Hash。實(shí)驗(yàn)表明害晦,加入reference hashes后 一個(gè)區(qū)塊大小增加不到960字節(jié)特铝。如果使用工作量證明(PoW)方案生成新塊,則必須將這些reference hashes作為puzzle的一部分包含在內(nèi)壹瘟,以避免攻擊者能夠以基本上零成本的方式生成具有不同引用的塊鲫剿。

  2. Glossy Network: Conflux和GHOST都需要維護(hù)block/樹(shù)的DAG的完整結(jié)構(gòu),而比特幣核心只傳播識(shí)別最長(zhǎng)的鏈中的block稻轨。因此,我們修改了比特幣核心的Gossip網(wǎng)絡(luò)層政冻,以廣播和轉(zhuǎn)發(fā)所有block。 為了確保當(dāng)block傳遞到共識(shí)層時(shí)汽摹,其所有過(guò)去的block已經(jīng)傳遞逼泣,Conflux保持每個(gè)block的有效性圾旨。 每當(dāng)收到一個(gè)block時(shí),它就會(huì)使用廣度搜索(BFS)遍歷DAG結(jié)構(gòu)莺治,并更新每個(gè)遍歷block的有效性帚稠。 當(dāng)且僅當(dāng)Conflux已收到block的所有過(guò)去block時(shí),block才有效(i.e可通過(guò)parent edges and reference到達(dá)的block)榄审。 然后搁进,Conflux將所有新驗(yàn)證的block傳遞到共識(shí)層昔头。

  3. Detecting Stale Blocks: 比特幣核心具有以下機(jī)制來(lái)檢測(cè)陳舊的塊(例如,由攻擊者生成和隱藏的塊)莱革。每個(gè)節(jié)點(diǎn)周期性地與其對(duì)等節(jié)點(diǎn)同步以維持網(wǎng)絡(luò)調(diào)整時(shí)間讹开,該時(shí)間是其對(duì)等體返回的時(shí)間戳的中值。 比特幣核心中的每個(gè)塊也帶有時(shí)間戳左冬。 如果新塊的時(shí)間戳早于前11個(gè)塊的中間時(shí)間戳拇砰,或者新塊的時(shí)間戳比網(wǎng)絡(luò)調(diào)整時(shí)間晚兩個(gè)小時(shí),則新塊將被標(biāo)記為無(wú)效。

利用和比特幣中使用相同的機(jī)制踱葛,具有以下修改尸诽。 首先性含,按照在實(shí)驗(yàn)中使用的塊生成率按比例修改規(guī)則商蕴。 例如芝发,如果系統(tǒng)每20秒生成一個(gè)塊(即辅鲸,比比特幣快30倍)格郁,則如果其時(shí)間戳早于先前330個(gè)塊的中值時(shí)間戳,則認(rèn)為該塊無(wú)效例书。 其次,Conflux不會(huì)刪除具有無(wú)效時(shí)間戳的塊雾叭。 在計(jì)算子樹(shù)中用于選擇主鏈的塊數(shù)時(shí),它會(huì)忽略此無(wú)效塊落蝙。 基本原理是:只要無(wú)效塊不再影響已經(jīng)穩(wěn)定的時(shí)期的分區(qū)方案,就可以將塊包含在未來(lái)的時(shí)期中筏勒,處理塊內(nèi)的事務(wù)是安全的移迫。

  1. Bootstrapping a Node: 當(dāng)一個(gè)節(jié)點(diǎn)啟動(dòng)時(shí),它將與每個(gè)節(jié)點(diǎn)握手并運(yùn)行一個(gè)單向同步過(guò)程來(lái)更新其本地狀態(tài)管行。對(duì)于GHOST和Conflux,節(jié)點(diǎn)需要從其對(duì)等體下載樹(shù)/ DAG中的所有塊捐顷,而不僅僅是主鏈。為了實(shí)現(xiàn)這種單向同步废赞,我們使用四種額外的消息類(lèi)型增強(qiáng)了比特幣核心代碼庫(kù):gettips,tips耘沼,getchains和chains朋魔。為簡(jiǎn)單起見(jiàn)榄笙,讓我們考慮節(jié)點(diǎn)A嘗試從另一節(jié)點(diǎn)B下載塊的情況陡叠。首先發(fā)送B請(qǐng)求提示列表的gettips消息嫩挤,即(父節(jié)點(diǎn))樹(shù)中的葉塊(由他們的32字節(jié)哈希)夸政。提示用于響應(yīng)gettips以檢索B知道的所有tip的塊哈希闰围。對(duì)于B的每個(gè)tip赃绊,A檢查這是否是未知塊并將所有答案打包在getchains消息中。收到此getchains消息后羡榴,對(duì)于A的每個(gè)新的tip碧查,B計(jì)算從創(chuàng)世塊到此提示的鏈中最后一個(gè)已知塊,并發(fā)送一個(gè)鏈消息校仑,其中包含從最后一個(gè)已知塊之后開(kāi)始的塊列表忠售。

4. 實(shí)驗(yàn)結(jié)果

?在多達(dá)800個(gè)Amazon EC2 m4.2xlarge虛擬機(jī)(VM)上部署了Conflux,每個(gè)虛擬機(jī)具有8個(gè)內(nèi)核和1Gbps網(wǎng)絡(luò)吞吐量迄沫。 默認(rèn)情況下稻扬,在每個(gè)VM中運(yùn)行25個(gè)Conflux完整節(jié)點(diǎn),并將每個(gè)完整節(jié)點(diǎn)的帶寬限制為20Mbps羊瘩。

?用inter-city延遲測(cè)量泰佳,將每個(gè)VM分配給20個(gè)主要城市之一。 插入人工延遲來(lái)模擬城市間的延遲尘吗。 對(duì)于每個(gè)完整節(jié)點(diǎn)連接到平均10個(gè)隨機(jī)選擇的對(duì)等體逝她。 為所有完整節(jié)點(diǎn)分配了相等的塊生成功率。 對(duì)于每個(gè)生成的塊睬捶,使用比特幣核心代碼庫(kù)中的測(cè)試實(shí)用程序來(lái)完成具有人工事務(wù)的塊黔宛。 為了避免不必要的PoW計(jì)算,我們使用泊松過(guò)程模擬挖掘擒贸。

?對(duì)于所有實(shí)驗(yàn)臀晃,監(jiān)控了Conflux引入的開(kāi)銷(xiāo)觉渴,因?yàn)镃onflux采用了基于DAG的方法。 與PoW相比徽惋,計(jì)算開(kāi)銷(xiāo)可以忽略不計(jì)疆拘,并且空間開(kāi)銷(xiāo)最大為每塊960字節(jié),與幾MB中的典型塊大小相比較小寂曹。

4.1 吞吐量

為了評(píng)估吞吐量的提高哎迄,在以下兩個(gè)配置下允許10k個(gè)完整節(jié)點(diǎn),每個(gè)配置運(yùn)行每個(gè)協(xié)議兩個(gè)小時(shí):

? 1)將塊大小限制從1MB增加到8MB隆圆,固定塊生成率為20s/塊;

? 2)將塊生成速率從每塊5秒減少到每塊80秒漱挚,固定塊大小限制為4MB。

Fig 7:Block utilization ratio

?在塊生成設(shè)置為4MB / 5s時(shí)渺氧,Conflux實(shí)現(xiàn)了2.88GB / h的吞吐量旨涝。假設(shè)與真實(shí)世界的比特幣網(wǎng)絡(luò)具有相同的交易規(guī)模,那么Conflux可以每秒處理3200個(gè)交易侣背。并且結(jié)果隨著塊大小和塊生成速率的增加白华,并行生成更多的塊。

4.2 交易確認(rèn)時(shí)間
Confirmation time and Risk tolerance

?確認(rèn)時(shí)間是用戶(hù)必須等待以獲得塊的總順序不會(huì)改變的高信度的持續(xù)時(shí)間贩耐。結(jié)果表明弧腥,Conflux可以在幾分鐘內(nèi)確定塊。 當(dāng)使用4MB / 5s的塊生成設(shè)置時(shí)潮太,Conflux平均在10.0min內(nèi)確認(rèn)塊管搪。 在所有配置下,Conflux中的用戶(hù)等待與GHOST類(lèi)似的確認(rèn)時(shí)間铡买。

?結(jié)果還表明更鲁,隨著塊大小的增加,塊需要更長(zhǎng)時(shí)間得到確認(rèn)奇钞。 這是因?yàn)槭褂幂^大的塊將導(dǎo)致并行生成更多塊澡为。 某些節(jié)點(diǎn)可能會(huì)生成不在鏈的最后一個(gè)塊下的塊(parent block不是最后一個(gè)塊)。增加塊的產(chǎn)生將使鏈更快地生長(zhǎng)景埃,交易更快得到確認(rèn)媒至。但是隨著塊生成速率接近單個(gè)節(jié)點(diǎn)的處理能力,這種影響會(huì)減小纠亚,因?yàn)轭l繁的并發(fā)塊和分支將減慢確認(rèn)速度塘慕。

?結(jié)果表明,即使用戶(hù)假設(shè)攻擊者控制了30%的塊生成功率蒂胞,Conflux仍然可以在16.8分鐘的介質(zhì)中確認(rèn)塊图呢,并且可以獲得99.99%的置信度。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市蛤织,隨后出現(xiàn)的幾起案子赴叹,更是在濱河造成了極大的恐慌,老刑警劉巖指蚜,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件乞巧,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡摊鸡,警方通過(guò)查閱死者的電腦和手機(jī)绽媒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)免猾,“玉大人是辕,你說(shuō)我怎么就攤上這事×蕴幔” “怎么了获三?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)锨苏。 經(jīng)常有香客問(wèn)我疙教,道長(zhǎng),這世上最難降的妖魔是什么伞租? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任贞谓,我火速辦了婚禮,結(jié)果婚禮上肯夏,老公的妹妹穿的比我還像新娘经宏。我一直安慰自己犀暑,他們只是感情好驯击,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著耐亏,像睡著了一般徊都。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上广辰,一...
    開(kāi)封第一講書(shū)人閱讀 51,301評(píng)論 1 301
  • 那天暇矫,我揣著相機(jī)與錄音,去河邊找鬼择吊。 笑死李根,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的几睛。 我是一名探鬼主播房轿,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了囱持?” 一聲冷哼從身側(cè)響起夯接,我...
    開(kāi)封第一講書(shū)人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎纷妆,沒(méi)想到半個(gè)月后盔几,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡掩幢,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年逊拍,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片际邻。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡顺献,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出枯怖,到底是詐尸還是另有隱情注整,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布度硝,位于F島的核電站肿轨,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏蕊程。R本人自食惡果不足惜椒袍,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望藻茂。 院中可真熱鬧驹暑,春花似錦、人聲如沸辨赐。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)掀序。三九已至帆焕,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間不恭,已是汗流浹背叶雹。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留换吧,地道東北人折晦。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像沾瓦,于是被迫代替她去往敵國(guó)和親满着。 傳聞我的和親對(duì)象是個(gè)殘疾皇子打颤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354