摘要:在中,系統(tǒng)的吞吐率瓶頸已不再是共識機(jī)制本身,而在于網(wǎng)絡(luò)帶寬以及每個(gè)節(jié)點(diǎn)局部的計(jì)算處理能力。我們先來簡單的看一下比特幣中的共識機(jī)制是如何工作的。這個(gè)協(xié)議通過使用工作量證明以及最長鏈規(guī)則來讓所有的機(jī)器節(jié)點(diǎn)對區(qū)塊鏈的狀態(tài)達(dá)成共識。
Conflux項(xiàng)目的CTO 伍鳴在Odaily星球日報(bào)與36Kr集團(tuán)共同主辦的2018 P.O.D New BlockTrend新區(qū)勢區(qū)塊鏈峰會(huì)上就《Scaling Nakamoto Consensus to Thousands of Transactions per Second》(將中本聰共識的吞吐率提升到每秒數(shù)千次交易)發(fā)表演講,對于基于POW機(jī)制的擴(kuò)容提出了新見解。
伍鳴從中本聰共識機(jī)制的工作原理出發(fā),指出簡單的在共識機(jī)制中增大區(qū)塊容量以及提高出塊率的方式并不可取,這兩種方式均會(huì)使區(qū)塊在網(wǎng)絡(luò)上傳播的延時(shí)相對變長,從而在賬本中產(chǎn)生很多分叉,不僅浪費(fèi)計(jì)算和網(wǎng)絡(luò)的資源,也危害了安全性。
對此,伍鳴介紹,Conflux利用區(qū)塊鏈中交易少?zèng)_突的特點(diǎn),樂觀的處理并發(fā)塊,且將區(qū)塊通過父邊和引用邊組織成有向無環(huán)圖(DAG),同時(shí)創(chuàng)新的將Ghost規(guī)則和Epoch的概念相結(jié)合,從而使參與協(xié)議的機(jī)器節(jié)點(diǎn)能夠在一致的賬本結(jié)構(gòu)中決定一致的交易全序。Ghost規(guī)則保證的了主鏈的選擇無法被逆轉(zhuǎn),DAG和Epoch幫助確定一致的交易全序。通過這樣的技術(shù),Conflux能夠在防治雙花攻擊的同時(shí)將分叉上的區(qū)塊變?yōu)橛行亩嵘行^(qū)塊的比例,進(jìn)而能夠?qū)⒐溝到y(tǒng)的吞吐率提升到每秒上千次交易,且能夠在分鐘級別的延時(shí)內(nèi)確認(rèn)交易。在Conflux中,系統(tǒng)的吞吐率瓶頸已不再是共識機(jī)制本身,而在于網(wǎng)絡(luò)帶寬以及每個(gè)節(jié)點(diǎn)局部的計(jì)算處理能力。
以下為伍鳴博士的演講實(shí)錄:
大家好,今天很高興有機(jī)會(huì)給大家介紹一下我們的Conflux項(xiàng)目,它是一個(gè)創(chuàng)新的公鏈系統(tǒng),它主要的優(yōu)勢特點(diǎn)是能夠?qū)⒒诠ぷ髁孔C明的中本聰共識機(jī)制的吞吐率提升到每秒上千條交易的量級。
我們先來看一下問題的背景。現(xiàn)如今,區(qū)塊鏈和數(shù)字貨幣在業(yè)界已經(jīng)產(chǎn)生了相當(dāng)大的影響力。也有越來越多的人開始關(guān)注它。以比特幣為代表的區(qū)塊鏈技術(shù)已經(jīng)發(fā)展成為一可以個(gè)在互聯(lián)網(wǎng)級別上支持安全的,一致的,分布式的交易賬本的平臺。這個(gè)平臺進(jìn)而帶動(dòng)了金融科技,供應(yīng)鏈,和醫(yī)療健康等應(yīng)用領(lǐng)域的技術(shù)創(chuàng)新。全球的數(shù)字貨幣市場也支撐著千億美元的市值。
然而,盡管如此,性能和效率問題仍然是現(xiàn)有的區(qū)塊鏈系統(tǒng)一個(gè)很大的痛點(diǎn)。這使得現(xiàn)有的區(qū)塊鏈的用戶體驗(yàn)很糟糕,比如很長的處理延遲,以及高昂的交易費(fèi)用。同時(shí)也限制了在區(qū)塊鏈系統(tǒng)上開發(fā)更有意義的應(yīng)用的能力。我們都知道,比特幣每秒可以處理大概7個(gè)交易,以太坊是每秒30個(gè)交易。而像visa這樣的中心化的交易服務(wù)可以支持每秒上千個(gè)交易的吞吐率。
我們先來簡單的看一下比特幣中的共識機(jī)制是如何工作的。在這個(gè)協(xié)議里面,交易是被打包到區(qū)塊里面的。所有的區(qū)塊形成了一個(gè)鏈,這個(gè)鏈表示了交易的歷史紀(jì)錄。每一個(gè)參與這個(gè)協(xié)議的機(jī)器節(jié)點(diǎn)都會(huì)想要去產(chǎn)生一個(gè)新的區(qū)塊并在該區(qū)塊里打包新的交易,并且通過將前一個(gè)區(qū)塊的哈希值存入新區(qū)塊的頭部信息來將新區(qū)快鏈在區(qū)塊鏈的尾部。這個(gè)協(xié)議通過使用工作量證明以及最長鏈規(guī)則來讓所有的機(jī)器節(jié)點(diǎn)對區(qū)塊鏈的狀態(tài)達(dá)成共識。同時(shí),它維持了一個(gè)很慢的全網(wǎng)的平均出塊率以及相對較小的區(qū)塊大小。
假設(shè)圖中是一個(gè)區(qū)塊鏈的當(dāng)前的狀態(tài),假設(shè)一個(gè)攻擊者想要逆轉(zhuǎn)區(qū)塊n-2中的一個(gè)交易,他就會(huì)想要從區(qū)塊n-3后面引入一個(gè)分叉來使區(qū)塊n-2變得無效。但是與此同時(shí),所有的誠實(shí)的節(jié)點(diǎn)都會(huì)遵循最長鏈規(guī)則從而將他們新產(chǎn)生出來的區(qū)塊鏈在最長鏈的尾部。由于系統(tǒng)維持了很低的出塊率和較小的塊大小,網(wǎng)絡(luò)延遲相對于出塊時(shí)間來講是比較小的,所以這些誠實(shí)的節(jié)點(diǎn)所產(chǎn)生的區(qū)塊基本上就是順序的。這樣的話,只要誠實(shí)節(jié)點(diǎn)的總算力超過50%,攻擊者就不能夠使他自己產(chǎn)生的鏈成為最長鏈。
但有人接下來可能會(huì)問,是不是可以通過增加出塊率或者增大區(qū)塊的大小來提高系統(tǒng)的吞吐率?簡單的在中本聰共識機(jī)制里面這樣去做是有問題的。因?yàn)椴徽撌窃龃髩K的大小還是增加出塊率都會(huì)使得區(qū)塊產(chǎn)生的時(shí)間和區(qū)塊在網(wǎng)絡(luò)上傳播的延遲相比變得相對較小。這就使得一個(gè)新塊在產(chǎn)生以后還來不及傳播到全網(wǎng)就會(huì)有其他的節(jié)點(diǎn)產(chǎn)生另外的新塊,于是就在區(qū)塊鏈上產(chǎn)生了分叉。雖然整個(gè)系統(tǒng)最終會(huì)收斂到某一個(gè)最長的分叉上,但是出塊率和塊大小越大的話,分叉的情況就會(huì)越發(fā)嚴(yán)重,分叉也會(huì)進(jìn)一步出現(xiàn)在已有的分叉上。所以最終區(qū)塊鏈的賬本就發(fā)展成這個(gè)樣子,就是有很多的分叉。
這帶來兩個(gè)問題。第一,這些分叉浪費(fèi)了網(wǎng)絡(luò)和計(jì)算資源,因?yàn)橹挥凶铋L鏈中的區(qū)塊才被認(rèn)為是有效的。第二,它危害了安全性,因?yàn)檎麄€(gè)區(qū)塊鏈里的最長鏈變短了,這使得攻擊者只需要少于50%的算力就可以產(chǎn)生出惡意的最長鏈了。
那接下來我們來看一下Conflux是如何解決這個(gè)問題的?我們注意到,在比特幣中的這種基于鏈的共識機(jī)制里,它本質(zhì)上對交易的執(zhí)行順序有一個(gè)嚴(yán)格的限制,也就是交易的執(zhí)行順序要和他們所在的區(qū)塊的產(chǎn)生的順序是一致的。比如在這個(gè)例子中,如果區(qū)塊1是在區(qū)塊0之后產(chǎn)生的,它隱含的意思是說,區(qū)塊1中的交易都要發(fā)生在區(qū)塊0的后面。同樣當(dāng)區(qū)塊2產(chǎn)生在區(qū)塊0后面,它也隱含了相同的意思。所以假如后面的區(qū)塊3,4,5,鏈在了區(qū)塊1的后面,區(qū)塊2就會(huì)被丟掉,因?yàn)槲覀儫o法確定它的交易應(yīng)該怎么去排序。
但是我們?nèi)绻屑?xì)觀察的話,實(shí)際上區(qū)塊鏈的系統(tǒng)里面,很多的交易是沒有沖突,所以它們可以按任意的順序執(zhí)行,只要所有的參與節(jié)點(diǎn)都同意一個(gè)順序就可以了。那么基于這樣一個(gè)觀察,我們Conflux的主要的核心想法就是這樣的。我們首先樂觀的處理這些可能并發(fā)的區(qū)塊,然后我們把這些區(qū)塊組織成有向無環(huán)圖,也就是DAG。接下來我們讓所有的機(jī)器節(jié)點(diǎn)首先假設(shè)所有的交易相互之間都沒有沖突,從而決定一個(gè)一致的區(qū)塊順序。然后他們再根據(jù)區(qū)塊的順序進(jìn)一步?jīng)Q定所有交易的執(zhí)行順序,最后再依照這個(gè)交易的順序去解決交易的沖突問題。
接下來我們用一個(gè)具體的例子來說明這個(gè)想法。假設(shè)這個(gè)圖上顯示的是Conflux的賬本在某一時(shí)刻的狀態(tài)。每個(gè)區(qū)塊都有一個(gè)指向它的父親區(qū)塊的parent邊。那么這些區(qū)塊和它們的parent邊,就構(gòu)成了一個(gè)樹形結(jié)構(gòu)。除了指向父親的邊以外,每一個(gè)區(qū)塊還可以有多個(gè)引用邊。這個(gè)引用邊主要是記錄和表達(dá)區(qū)塊之間的happens-before關(guān)系。比如,如果一個(gè)機(jī)器節(jié)點(diǎn)在產(chǎn)生區(qū)塊E的時(shí)候,它已經(jīng)有了區(qū)塊D,而且這個(gè)時(shí)候,D也沒有任何一個(gè)其他區(qū)塊引用了它。那么這個(gè)節(jié)點(diǎn)可以給E加上一個(gè)引用D的邊來表示D是在E之前產(chǎn)生的。
有了這些邊的定義,這個(gè)賬本結(jié)構(gòu)就定下來了,這個(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è)主鏈來決定一個(gè)一致的區(qū)塊的全序。
為了決定主鏈,Conflux使用了Ghost規(guī)則。具體來說就是,我們從創(chuàng)世塊開始,迭代的去從孩子區(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ū)塊。相應(yīng)的我們根據(jù)相同的規(guī)則,將區(qū)塊C,E,H,都選進(jìn)了主鏈。
為了產(chǎn)生一個(gè)新的區(qū)塊,一個(gè)機(jī)器節(jié)點(diǎn)首先選擇主鏈上的最后一個(gè)區(qū)塊作為新區(qū)塊的父親,然后這個(gè)新區(qū)塊再把所有已經(jīng)收到但還沒有被其他區(qū)塊所引用的區(qū)塊引用起來。
這里之所以使用Ghost規(guī)則而不是最長鏈規(guī)則來選主鏈,是因?yàn)镚host規(guī)則中所有的區(qū)塊,包括那些在分叉上的區(qū)塊,都會(huì)對主鏈的選擇做出貢獻(xiàn)。這樣的話,就保證了只要攻擊者的算力沒有超過50%, 就無法改變由誠實(shí)節(jié)點(diǎn)確定的主鏈。
現(xiàn)在我們有了讓所有機(jī)器節(jié)點(diǎn)對主鏈產(chǎn)生共識的機(jī)制。那接下來,這些節(jié)點(diǎn)如何對區(qū)塊的全序達(dá)成共識呢?為了做到這一點(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的順序來給區(qū)塊排個(gè)序。然后在每一個(gè)Epoch內(nèi)部,我們再按照拓?fù)渑判騺泶_定區(qū)塊的順序。如果出現(xiàn)平局的情況,我們再根據(jù)區(qū)塊的哈希值來打破平局。所以這個(gè)圖中的區(qū)塊排好序以后就是這樣的。接下來我們要為交易排序,Conflux首先按照區(qū)塊的順序去給交易排序。然后在每個(gè)區(qū)塊內(nèi)部,我們就按照交易在區(qū)塊里所在的位置來排就可以了。
交易可能會(huì)沖突。比如這個(gè)例子里面的交易2和交易3。因?yàn)榻灰?執(zhí)行過以后,賬戶X里面就沒有足夠的余額來完成交易3了,因?yàn)樵谶@個(gè)交易的全序里面,交易3是發(fā)生在交易2之后的,所以我們會(huì)讓交易3變?yōu)闊o效。另一種情況是,相同的交易有可能被不同的節(jié)點(diǎn)打包到不同的并發(fā)區(qū)塊里,比如交易4。 在這種情況下,Conflux只會(huì)接受在全序中出現(xiàn)的第一個(gè)這樣的交易,而把后面的重復(fù)交易無效掉。
那么接下來一個(gè)問題是Conflux如何能夠防止雙花攻擊。我們首先來看一下一個(gè)攻擊者如何能夠逆轉(zhuǎn)在賬本中的一個(gè)交易,比如交易4。為了做到這一點(diǎn),一個(gè)攻擊者需要產(chǎn)生一個(gè)交易4的雙花交易,打包到一個(gè)區(qū)塊里面,并且將這個(gè)區(qū)塊在區(qū)塊的全序中插入到區(qū)塊B的前面。但攻擊者很難做到這一點(diǎn),主要有兩個(gè)原因。第一個(gè)就是除非攻擊者能夠改變主鏈,不然他不能夠逆轉(zhuǎn)交易,因?yàn)榻灰椎捻樞蚴怯芍麈渷頉Q定的。比如一個(gè)攻擊者想把一個(gè)塊插在靠前的位置,他能做就是在一個(gè)很早的Epoch里面的區(qū)塊后面接著產(chǎn)生新塊。但是只要這個(gè)塊不在主鏈上,它就最終還是會(huì)屬于一個(gè)很晚的Epoch。因?yàn)楫?dāng)一個(gè)誠實(shí)的新塊產(chǎn)生以后,它會(huì)通過引用邊把這個(gè)攻擊者的區(qū)塊給拉到新的Epoch里面。
第二個(gè)原因就是,如果攻擊者沒有超過50%的算力,他就沒有辦法改變主鏈。為什么是50%呢。我這里給出一個(gè)直觀的解釋。假設(shè)區(qū)塊A是一個(gè)主鏈上的塊,一個(gè)攻擊者想要用區(qū)塊A’來取代A在主鏈上的位置。那么所有攻擊者產(chǎn)生的塊都會(huì)在A’的子樹下面,然而所有誠實(shí)的節(jié)點(diǎn)所產(chǎn)生的塊都會(huì)在A的子樹下面,這樣的話,攻擊者就需要超過50%的算力才能讓A’的子樹超過A的子樹。根據(jù)理論的分析,A’能夠取代A的概率是隨著時(shí)間的增加而指數(shù)下降的。
因此,一個(gè)交易的確認(rèn)就包含以下幾步。用戶首先對攻擊者的算力比例以及他所能承受的風(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ò)連接起來,他們通過Gossip的方式在網(wǎng)絡(luò)中傳播交易和區(qū)塊。每個(gè)機(jī)器節(jié)點(diǎn),維護(hù)一個(gè)交易池,交易池里面緩存著將要打包的交易。另外每個(gè)機(jī)器節(jié)點(diǎn)同時(shí)也在不停的運(yùn)行Conflux的共識協(xié)議。
接下來我們再簡要的看一些實(shí)驗(yàn)結(jié)果。我們搭建了Conflux的一個(gè)原型系統(tǒng),然后在Amazom EC2上運(yùn)行1萬個(gè)Conflux節(jié)點(diǎn)來做實(shí)驗(yàn)。為了模擬公網(wǎng)上真實(shí)網(wǎng)絡(luò)環(huán)境,我們限制每個(gè)節(jié)點(diǎn)的網(wǎng)絡(luò)帶寬是20Mbps。在實(shí)驗(yàn)中我們調(diào)整不同的區(qū)塊大小和出塊率。我們測量了系統(tǒng)的吞吐率和交易延遲,并且和比特幣以及Ghost的協(xié)議進(jìn)行了比較。
這個(gè)藍(lán)色線是Conflux,可以看到區(qū)塊越大、出塊率越高,Conflux的吞吐率就可以線性的增加,但是比特幣和Ghost就做不到。這是因?yàn)檫@時(shí)比特幣和Ghost的區(qū)塊利用率會(huì)大幅下降。
最后總結(jié)一下。Conflux利用了優(yōu)化處理并發(fā)區(qū)塊的想法,使得公鏈系統(tǒng)的吞吐率達(dá)到每秒上千次的交易,以及分鐘級別的確認(rèn)時(shí)間。在Conflux的交易里面,整個(gè)系統(tǒng)的吞吐率瓶頸已經(jīng)不在共識機(jī)制上,而是在網(wǎng)絡(luò)帶寬或每個(gè)節(jié)點(diǎn)的計(jì)算能力上。
謝謝。
本文部分內(nèi)容經(jīng)授權(quán)轉(zhuǎn)載自“36氪”和“Odaily星球日報(bào)”
Conflux在團(tuán)隊(duì)成員的組成方面有著巨大的優(yōu)勢:團(tuán)隊(duì)成員均有著專業(yè)的研究背景,豐富的從業(yè)經(jīng)驗(yàn)和編程大賽獲獎(jiǎng)經(jīng)歷。
Conflux是由中國唯一圖靈獎(jiǎng)獲得者姚期智教授所領(lǐng)導(dǎo)的團(tuán)隊(duì)。姚期智院士是世界著名的計(jì)算機(jī)科學(xué)家。因?yàn)槠鋵τ?jì)算機(jī)理論研究的重要貢獻(xiàn),包括基于復(fù)雜性的偽隨機(jī)數(shù)生成理論,密碼學(xué)和通信復(fù)雜性,在2000年獲得了圖靈獎(jiǎng)。此外,包括聯(lián)合創(chuàng)始人,首席技術(shù)官,核心系統(tǒng)工程開發(fā)師,算法工程師等技術(shù)團(tuán)隊(duì)成員,大部分都是“姚班”出來的。并且?guī)缀跛腥硕加袊H信息學(xué)競賽,ACM-ICPC,Code Jam等編程大賽金牌的經(jīng)歷。Conflux團(tuán)隊(duì)在技術(shù)人員配置方面,有著無與倫比的優(yōu)勢。而在未來的發(fā)展中,還會(huì)不斷擴(kuò)充壯大這一核心優(yōu)勢。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/24487.html
摘要:在中,系統(tǒng)的吞吐率瓶頸已不再是共識機(jī)制本身,而在于網(wǎng)絡(luò)帶寬以及每個(gè)節(jié)點(diǎn)局部的計(jì)算處理能力。我們先來簡單的看一下比特幣中的共識機(jī)制是如何工作的。這個(gè)協(xié)議通過使用工作量證明以及最長鏈規(guī)則來讓所有的機(jī)器節(jié)點(diǎn)對區(qū)塊鏈的狀態(tài)達(dá)成共識。 showImg(https://segmentfault.com/img/bVbk0h4?w=1200&h=777);Conflux項(xiàng)目的CTO 伍鳴在Odail...
摘要:在中,系統(tǒng)的吞吐率瓶頸已不再是共識機(jī)制本身,而在于網(wǎng)絡(luò)帶寬以及每個(gè)節(jié)點(diǎn)局部的計(jì)算處理能力。我們先來簡單的看一下比特幣中的共識機(jī)制是如何工作的。這個(gè)協(xié)議通過使用工作量證明以及最長鏈規(guī)則來讓所有的機(jī)器節(jié)點(diǎn)對區(qū)塊鏈的狀態(tài)達(dá)成共識。 showImg(https://segmentfault.com/img/bVbk0h4?w=1200&h=777);Conflux項(xiàng)目的CTO 伍鳴在Odail...
摘要:月日圣誕夜,伍鳴博士做客火星財(cái)經(jīng)創(chuàng)始學(xué)習(xí)群,分享了使用結(jié)構(gòu)提升中本聰共識的吞吐率。為什么傳統(tǒng)的基于的中本聰共識機(jī)制的吞吐率非常低下總結(jié)來說,為了安全,不得不如此。這樣,就繞開了中本聰共識中安全與效率兩難的困境。 12月25日圣誕夜,Conflux CTO伍鳴博士做客「火星財(cái)經(jīng)創(chuàng)始學(xué)習(xí)群」,分享了Conflux: 使用 DAG 結(jié)構(gòu)提升中本聰共識的吞吐率。 嘉賓簡介: showImg(h...
閱讀 1286·2021-11-11 16:55
閱讀 1550·2021-10-08 10:16
閱讀 1208·2021-09-26 10:20
閱讀 3589·2021-09-01 10:47
閱讀 2467·2019-08-30 15:52
閱讀 2695·2019-08-30 13:18
閱讀 3205·2019-08-30 13:15
閱讀 1143·2019-08-30 10:55