論文作者:Chenxing Li*, Peilun Li*, Dong Zhou* ? , Wei Xu, Fan Long ? , and Andrew Chi-Chih Yao,清華大學(xué)交叉信息研究院
????本論文從中本聰共識(shí)機(jī)制的工作原理出發(fā),指出簡(jiǎn)單的在共識(shí)機(jī)制中增大區(qū)塊容量以及提高出塊率的方式并不可取,這兩種方式均會(huì)使區(qū)塊在網(wǎng)絡(luò)上傳播的延時(shí)相對(duì)變長(zhǎng),從而在賬本中產(chǎn)生很多分叉,不僅浪費(fèi)計(jì)算和網(wǎng)絡(luò)的資源,也危害了安全性。而論文提出的Conflux利用區(qū)塊鏈中交易少?zèng)_突的特點(diǎn),樂(lè)觀的處理并發(fā)塊,且將區(qū)塊通過(guò)父邊和引用邊組織成有向無(wú)環(huán)圖(DAG),同時(shí)創(chuàng)新的將Ghost規(guī)則和Epoch的概念相結(jié)合,從而使參與協(xié)議的機(jī)器節(jié)點(diǎn)能夠在一致的賬本結(jié)構(gòu)中決定一致的交易全序。Ghost規(guī)則保證的了主鏈的選擇無(wú)法被逆轉(zhuǎn),DAG和Epoch幫助確定一致的交易全序。通過(guò)這樣的技術(shù),Conflux能夠在防治雙花攻擊的同時(shí)將分叉上的區(qū)塊變?yōu)橛行亩嵘行^(qū)塊的比例,進(jìn)而能夠?qū)⒐溝到y(tǒng)的吞吐率提升到每秒上千次交易,且能夠在分鐘級(jí)別的延時(shí)內(nèi)確認(rèn)交易。在Conflux中,系統(tǒng)的吞吐率瓶頸已不再是共識(shí)機(jī)制本身,而在于網(wǎng)絡(luò)帶寬以及每個(gè)節(jié)點(diǎn)局部的計(jì)算處理能力。
介紹
? ??現(xiàn)如今,區(qū)塊鏈和數(shù)字貨幣在業(yè)界已經(jīng)產(chǎn)生了相當(dāng)大的影響力。以比特幣為代表的區(qū)塊鏈技術(shù)已經(jīng)發(fā)展成為一可以個(gè)在互聯(lián)網(wǎng)級(jí)別上支持安全的,一致的,分布式的交易賬本的平臺(tái)。這個(gè)平臺(tái)進(jìn)而帶動(dòng)了金融科技,供應(yīng)鏈,和醫(yī)療健康等應(yīng)用領(lǐng)域的技術(shù)創(chuàng)新。全球的數(shù)字貨幣市場(chǎng)也支撐著千億美元的市值。
? ? 然后講述了像比特幣這樣采用POW協(xié)議的區(qū)塊鏈的底層原理,這種系統(tǒng)性能和效率方面存在很大的問(wèn)題。由于只能有一個(gè)礦工可以贏得競(jìng)爭(zhēng),寫入?yún)^(qū)塊,導(dǎo)致并發(fā)區(qū)塊作為分叉被遺棄,而且緩慢的性能是防止攻擊的必要條件,所以性能問(wèn)題是中本聰區(qū)塊鏈中一個(gè)比較重要的瓶頸。我們都知道,比特幣每秒可以處理大概7個(gè)交易,以太坊是每秒30個(gè)交易。為了獲得比較高的安全性,一個(gè)交易往往需要等待將近10個(gè)區(qū)塊后才能確認(rèn)交易。這些吞吐量不足,以及高延遲的特征限制了區(qū)塊鏈技術(shù)的應(yīng)用,這就導(dǎo)致了糟糕的用戶體驗(yàn)
? ? 過(guò)去的一些研究主要集中在減少共識(shí)算法的參與者以提高性能而不損害區(qū)塊鏈的安全性。但是這些做法可能會(huì)在協(xié)議參與者之間產(chǎn)生不期望的層次結(jié)構(gòu)并且損害區(qū)塊鏈的去中心化的特點(diǎn)。
Conflux
? ? 本論文所介紹的Conflux方法是一個(gè)快速,可拓展的,分散的區(qū)塊鏈系統(tǒng),它可以每秒處理上千個(gè)交易,并且可以在數(shù)分鐘內(nèi)確認(rèn)每一筆交易。Conflux關(guān)鍵特點(diǎn)是它可以讓多個(gè)參與者同時(shí)貢獻(xiàn)區(qū)塊的時(shí)候還保證了安全性,不會(huì)造成分叉丟失的現(xiàn)象出現(xiàn)。
????我們注意到,在比特幣中的這種基于鏈的共識(shí)機(jī)制里,它本質(zhì)上對(duì)交易的執(zhí)行順序有一個(gè)嚴(yán)格的限制,也就是交易的執(zhí)行順序要和他們所在的區(qū)塊的產(chǎn)生順序是一致的。鑒于交易很少在區(qū)塊鏈中發(fā)生沖突(特別是在加密貨幣中),Conflux首先樂(lè)觀地假設(shè)并發(fā)塊中的事務(wù)默認(rèn)情況下不會(huì)相互沖突,因此只考慮區(qū)塊生成器指定的happens-before關(guān)系。實(shí)際上區(qū)塊鏈的系統(tǒng)里面,很多的交易是沒(méi)有沖突的,所以它們可以按任意的順序執(zhí)行,只要所有的參與節(jié)點(diǎn)都同意一個(gè)順序就可以了。
? ? 為了安全的合并并發(fā)的區(qū)塊,Conflux維護(hù)了兩種類型的塊間關(guān)系。在Conflux中,當(dāng)一個(gè)礦工節(jié)點(diǎn)生成一個(gè)區(qū)塊的時(shí)候,這個(gè)節(jié)點(diǎn)要在新區(qū)塊中定義它的父塊(前置塊),并且在兩個(gè)塊之間建立一個(gè)parent邊。這些parent邊使Conflux能夠在其總鏈上實(shí)現(xiàn)一致的不可逆轉(zhuǎn)的共識(shí)。 該節(jié)點(diǎn)還標(biāo)識(shí)所有沒(méi)有進(jìn)入邊的塊,并從新塊到這些塊創(chuàng)建一條reference邊。這個(gè)reference邊表示的是這些塊在新塊生成之前就已經(jīng)存在了,它們使Conflux能夠系統(tǒng)地?cái)U(kuò)展已達(dá)成的共識(shí)以合并并發(fā)塊。這就導(dǎo)致Conflux區(qū)塊看起來(lái)像一個(gè)復(fù)雜的DAG圖,而不是一個(gè)有可能分叉的鏈。
? ? 下面我截取了Conflux項(xiàng)目的CTO 伍鳴在 2018 POD New BlockTrend新區(qū)勢(shì)區(qū)塊鏈峰會(huì)上的演講來(lái)理解這個(gè)共識(shí)機(jī)制,有圖比較好理解點(diǎn)。
? ??有了這些邊的定義,這個(gè)賬本結(jié)構(gòu)就定下來(lái)了,這個(gè)結(jié)構(gòu)會(huì)在全網(wǎng)節(jié)點(diǎn)進(jìn)行廣播,所以,所有的節(jié)點(diǎn)最終都會(huì)得到一個(gè)一致的賬本。那么有了一致的賬本以后,所有的節(jié)點(diǎn)如何去決定一個(gè)一致的區(qū)塊全序呢?論文核心想法是,首先,這些節(jié)點(diǎn)先在DAG中決定一個(gè)一致的主鏈,然后,再根據(jù)這個(gè)主鏈來(lái)決定一個(gè)一致的區(qū)塊的全序。
????為了決定主鏈,Conflux使用了Ghost規(guī)則。具體來(lái)說(shuō)就是,從創(chuàng)世塊開(kāi)始,迭代的去從孩子區(qū)塊中選擇下一個(gè)在主鏈上的區(qū)塊。選擇的規(guī)則是挑選擁有最大子樹的孩子區(qū)塊。比如,區(qū)塊A和區(qū)塊B是創(chuàng)世區(qū)塊的兩個(gè)孩子區(qū)塊。A的子樹有6個(gè)區(qū)塊,B的子樹有5個(gè)區(qū)塊。所以我們選擇區(qū)塊A作為緊接著創(chuàng)世區(qū)塊的主鏈區(qū)塊。
????為了產(chǎn)生一個(gè)新的區(qū)塊,一個(gè)機(jī)器節(jié)點(diǎn)首先選擇主鏈上的最后一個(gè)區(qū)塊作為新區(qū)塊的父親,然后這個(gè)新區(qū)塊再把所有已經(jīng)收到但還沒(méi)有被其他區(qū)塊所引用的區(qū)塊引用起來(lái)。這里之所以使用Ghost規(guī)則而不是最長(zhǎng)鏈規(guī)則來(lái)選主鏈,是因?yàn)镚host規(guī)則中所有的區(qū)塊,包括那些在分叉上的區(qū)塊,都會(huì)對(duì)主鏈的選擇做出貢獻(xiàn)。這樣的話,就保證了只要攻擊者的算力沒(méi)有超過(guò)50%, 就無(wú)法改變由誠(chéng)實(shí)節(jié)點(diǎn)確定的主鏈。
? ??現(xiàn)在有了讓所有機(jī)器節(jié)點(diǎn)對(duì)主鏈產(chǎn)生共識(shí)的機(jī)制。那接下來(lái),這些節(jié)點(diǎn)如何對(duì)區(qū)塊的全序達(dá)成共識(shí)呢?為了做到這一點(diǎn),引入一個(gè)Epoch的概念。在主鏈上的每一個(gè)區(qū)塊就確定了一個(gè)Epoch。在分叉上的區(qū)塊屬于哪個(gè)Epoch,是由第一個(gè)產(chǎn)生在它之后的主鏈區(qū)塊所在的Epoch決定的。比如,區(qū)塊D屬于Epoch E,因?yàn)镈最先被E引用,所以產(chǎn)生在E之前,但是D并不產(chǎn)生在C之前。
? ??所以,在Conflux中,首先按照Epoch的順序來(lái)給區(qū)塊排個(gè)序。然后在每一個(gè)Epoch內(nèi)部,按照拓?fù)渑判騺?lái)確定區(qū)塊的順序。如果出現(xiàn)平局的情況,再根據(jù)區(qū)塊的哈希值來(lái)打破平局。接下來(lái)我們要為交易排序,Conflux首先按照區(qū)塊的順序去給交易排序。然后在每個(gè)區(qū)塊內(nèi)部,就按照交易在區(qū)塊里所在的位置來(lái)排就可以了。
? ? 后面演講還涉及到如何防止交易沖突,如何防止雙花攻擊以及51%算力攻擊的防范方法。然后一個(gè)交易的確認(rèn)包含以下幾步。用戶首先對(duì)攻擊者的算力比例以及他所能承受的風(fēng)險(xiǎn)有一個(gè)假設(shè)。給定這個(gè)假設(shè),Conflux首先找到這個(gè)交易所屬的Epoch,然后找到和這個(gè)Epoch相應(yīng)的主鏈區(qū)塊。最后再檢查這個(gè)主鏈區(qū)塊被逆轉(zhuǎn)的概率是否小于用戶所能承受的風(fēng)險(xiǎn)。如果小于,則該交易可以確認(rèn)。
????這個(gè)圖概括的展示了Conflux系統(tǒng)架構(gòu)。 所有參加Conflux協(xié)議的機(jī)器節(jié)點(diǎn)由一個(gè)p2p的網(wǎng)絡(luò)連接起來(lái),他們通過(guò)Gossip的方式在網(wǎng)絡(luò)中傳播交易和區(qū)塊。每個(gè)機(jī)器節(jié)點(diǎn),維護(hù)一個(gè)交易池,交易池里面緩存著將要打包的交易。另外每個(gè)機(jī)器節(jié)點(diǎn)同時(shí)也在不停的運(yùn)行Conflux的共識(shí)協(xié)議。
? ? 值得注意的是,這篇論文只關(guān)注于設(shè)計(jì)和實(shí)現(xiàn)共識(shí)協(xié)議,而獎(jiǎng)勵(lì)機(jī)制沒(méi)有在論文的范圍內(nèi)。然后在論文中提到的“誠(chéng)實(shí)節(jié)點(diǎn)”是那些在Conflux上忠實(shí)執(zhí)行沒(méi)有錯(cuò)誤的程序的節(jié)點(diǎn)。對(duì)于獎(jiǎng)勵(lì)機(jī)制可作為Conflux未來(lái)的工作。
Contribution
? ? 這篇論文的主要貢獻(xiàn):
? ? 1.共識(shí)協(xié)議:論文主要介紹了一個(gè)快速可拓展,基于DAG圖的中本聰共識(shí)協(xié)議以及它的原型實(shí)現(xiàn)Conflux來(lái)樂(lè)觀地處理并發(fā)區(qū)塊,然后再?zèng)Q定一個(gè)一致的區(qū)塊順序,并在這個(gè)區(qū)塊順序下進(jìn)一步?jīng)Q定所有交易的執(zhí)行順序,最后再依照這個(gè)交易的順序去解決交易的沖突問(wèn)題。Conflux創(chuàng)新的維護(hù)兩個(gè)塊間關(guān)系來(lái)安全的合并并發(fā)區(qū)塊。
? ? 2.Conflux實(shí)現(xiàn):論文基于比特幣的代碼庫(kù)來(lái)實(shí)現(xiàn)Conflux。Conflux是第一個(gè)基于DAG圖的中本聰區(qū)塊鏈系統(tǒng),并且可以在每秒執(zhí)行上千的交易。
? ? 3.實(shí)驗(yàn)結(jié)果:論文系統(tǒng)的大規(guī)模評(píng)估了Conflux。根據(jù)實(shí)驗(yàn)可以發(fā)現(xiàn),當(dāng)執(zhí)行20k個(gè)完整節(jié)點(diǎn)的時(shí)候,Conflux可以達(dá)到2.88GB/h ~5.76GB/h的交易吞吐量,并且可以讓交易在4.5~13.8分鐘內(nèi)確認(rèn)高度信任的交易,即不可逆轉(zhuǎn)的交易。