Corda共識(shí)機(jī)制深入分析

本文是Corda共識(shí)機(jī)制系列文章的第三篇,前兩篇已經(jīng)論述了Corda是否需要共識(shí)機(jī)制,以及需要什么樣的共識(shí)機(jī)制,這一篇將給出Corda共識(shí)機(jī)制的具體方案。

3. Corda共識(shí)機(jī)制設(shè)計(jì)方案

Corda系統(tǒng)應(yīng)該針對(duì)發(fā)生notary變更的對(duì)象(STXO)達(dá)成共識(shí),這是本文第二部分通過(guò)理論推導(dǎo)得出的結(jié)論,但并沒(méi)有給出具體的共識(shí)方案。在這里,我們首先從實(shí)踐的角度把這個(gè)共識(shí)機(jī)制的合理性再論述一次,也就自然而然地推導(dǎo)出共識(shí)機(jī)制的具體實(shí)現(xiàn)模式了。

為什么無(wú)法針對(duì)UTXO達(dá)成共識(shí)

我們首先來(lái)看基于UTXO的共識(shí)模式(其實(shí)這個(gè)名字不精確,嚴(yán)格意義上說(shuō)應(yīng)該叫交易階段共識(shí),后面我們會(huì)詳細(xì)討論到),也就是典型的區(qū)塊鏈系統(tǒng)的共識(shí)模式:當(dāng)你要使用或花掉一個(gè)UTXO的時(shí)候,各個(gè)節(jié)點(diǎn)要確認(rèn)這個(gè)UTXO沒(méi)有被花過(guò),因此要查詢(xún)UTXO數(shù)據(jù)庫(kù),找到這個(gè)對(duì)象,才能確認(rèn)交易。驗(yàn)證節(jié)點(diǎn)都同意交易成立,交易(或者交易所屬的區(qū)塊)就被記錄在鏈上,成為了“事實(shí)”。

很顯然,UTXO共識(shí)模式對(duì)基于notary的、非廣播式的系統(tǒng)是不適用的:以Corda為例,一個(gè)狀態(tài)如果沒(méi)有在若干notary之間發(fā)生轉(zhuǎn)移,那么其當(dāng)前notary就可以確認(rèn)他是否以前被使用過(guò),不需要其他notary的參與。另一方面,由于系統(tǒng)的交易是不廣播的,系統(tǒng)中的其他notary對(duì)這個(gè)對(duì)象的存在一無(wú)所知,也就是文章第二部分提到過(guò)的的:對(duì)系統(tǒng)中其他notary而言,這個(gè)對(duì)象既不是UTXO,也不是STXO,所以其他notary也無(wú)法參與這個(gè)交易過(guò)程。

反過(guò)來(lái),對(duì)于發(fā)生過(guò)notary變更的對(duì)象,基于UTXO的共識(shí)模式也有問(wèn)題:要實(shí)現(xiàn)基于UTXO的交易合法性檢查,意味著要讓所有notary知道變更之后的對(duì)象在交易發(fā)生時(shí)仍然是一個(gè)UTXO,也就是說(shuō)讓每個(gè)notary都把變更后的UTXO記錄在案,用于交易發(fā)生時(shí)的判斷依據(jù)。簡(jiǎn)單來(lái)說(shuō),這樣做確實(shí)是可以的,對(duì)于防止這個(gè)新的UTXO被雙花,是有效的,讀者可以自行驗(yàn)證。然而,由于廣播的是notary變更產(chǎn)生的新UTXO,而那個(gè)經(jīng)過(guò)notary變更已經(jīng)失效的STXO的信息卻不被其他notary所知,這樣就無(wú)法避免文章第二部分所說(shuō)的,由于各種技術(shù)的或者蓄意欺詐的原因,而使得這個(gè)對(duì)象再次通過(guò)變更notary的方式,在其他notary那里生成新的UTXO,從而實(shí)現(xiàn)雙花——關(guān)鍵點(diǎn)在于,剛剛廣播的那個(gè)UTXO是上一次notary變更生成的對(duì)象,而雙花攻擊者通過(guò)二次notary變更生成的UTXO和上次變更生成的UTXO確實(shí)不是同一個(gè)對(duì)象,所以任何節(jié)點(diǎn)都無(wú)法通過(guò)UTXO的記錄判斷這個(gè)雙花。

簡(jiǎn)單說(shuō),無(wú)論從有效性還是必要性的角度,針對(duì)UTXO達(dá)成共識(shí)在Corda模式的系統(tǒng)中都是沒(méi)有意義的。

基于STXO的共識(shí)

針對(duì)STXO達(dá)成共識(shí),也就是說(shuō)系統(tǒng)中所有的notary都知道某個(gè)對(duì)象是STXO,后續(xù)交易確認(rèn)時(shí)可以作為依據(jù)。很顯然,對(duì)于沒(méi)有發(fā)生過(guò)notary變更的對(duì)象,他的所有歷史信息都在某一個(gè)notary那里記錄,讓系統(tǒng)中的其他notary知道他什么時(shí)候變成STXO仍然沒(méi)意義,因此我們可以只針對(duì)發(fā)生notary變更的情況來(lái)討論共識(shí)的流程:

廣播,當(dāng)一個(gè)對(duì)象發(fā)生notary變更的時(shí)候,該對(duì)象的當(dāng)前notary應(yīng)該把這件事廣播通知系統(tǒng)中的所有其他notary,告訴他們“某個(gè)對(duì)象發(fā)生了notary變更,因此他已經(jīng)變成了STXO,另外會(huì)新生成一個(gè)UTXO”。其他notary收到這個(gè)廣播,應(yīng)該做一系列的處理:

查詢(xún),按照交易規(guī)則,查詢(xún)自己的STXO庫(kù),看看這個(gè)對(duì)象是不是在自己這里以前發(fā)生過(guò)交易,已經(jīng)是STXO了。注意,我們前面提到過(guò)的,在Corda這樣的系統(tǒng)中,一個(gè)notary對(duì)自身STXO數(shù)據(jù)庫(kù)的查詢(xún)結(jié)果,只能反映一個(gè)對(duì)象在當(dāng)前notary見(jiàn)證過(guò)的交易范圍內(nèi)是不是STXO,而在整個(gè)系統(tǒng)中是不是STXO,就要靠下面一個(gè)動(dòng)作——“共識(shí)”——來(lái)完成了。

共識(shí),每個(gè)notary能夠返回的結(jié)果無(wú)非三種可能性:查到/沒(méi)查到/沒(méi)反饋,看到這里,大家應(yīng)該會(huì)心一笑了,這就是共識(shí)機(jī)制派上用場(chǎng)的地方:不是所有節(jié)點(diǎn)都一定會(huì)反饋同一個(gè)結(jié)果(包括有些節(jié)點(diǎn)因?yàn)椴辉诰€而沒(méi)有反饋),因此必須要有合適的機(jī)制來(lái)解決整個(gè)系統(tǒng)對(duì)“這個(gè)對(duì)象是不是STXO”最終達(dá)成一致的問(wèn)題,這就是典型的分布式共識(shí)場(chǎng)景。實(shí)現(xiàn)共識(shí)的技術(shù)手段,Corda并沒(méi)有具體規(guī)定,根據(jù)官方的說(shuō)法,Corda并不拒絕采用任何有效的共識(shí)機(jī)制,聽(tīng)起來(lái)有點(diǎn)類(lèi)似Fabric支持可插拔的共識(shí)模型,總之我們應(yīng)該認(rèn)為共識(shí)可以達(dá)成。具體的實(shí)現(xiàn)技術(shù),我們將在下一節(jié)進(jìn)行討論。

確認(rèn),如果共識(shí)的結(jié)論是這個(gè)對(duì)象目前不是STXO,因此可以交易,則系統(tǒng)中的各個(gè)notary就可以接受這個(gè)交易,并且將該對(duì)象記錄到自己的STXO數(shù)據(jù)庫(kù)中,使其成為已經(jīng)交易的狀態(tài),從而杜絕這個(gè)對(duì)象未來(lái)可能的雙花。而后,發(fā)布這個(gè)變更消息的notary,也應(yīng)當(dāng)根據(jù)這個(gè)共識(shí)的結(jié)果,最終確認(rèn)這個(gè)變更交易,產(chǎn)生新的UTXO。這樣一來(lái),notary變更交易就正式完成了。反過(guò)來(lái),如果共識(shí)的結(jié)論是“這個(gè)對(duì)象以前就是STXO”,那么各個(gè)節(jié)點(diǎn)就通過(guò)這個(gè)共識(shí)拒絕了這個(gè)交易,他們自身不需要做額外的動(dòng)作,而發(fā)布變更消息的節(jié)點(diǎn),也不應(yīng)該為這個(gè)交易提供確認(rèn)。

上述共識(shí)機(jī)制可以用下圖表示:

Consensus.png

整個(gè)圖中涉及了兩個(gè)交易,紅色線條標(biāo)識(shí)的第一個(gè)交易是notary變更交易,如上所述,這個(gè)交易需要“全網(wǎng)”所有notary的共識(shí)才能完成,其中共識(shí)流程由黑色線條表示。藍(lán)色線條標(biāo)識(shí)的第二個(gè)交易是普通交易,其輸入是第一個(gè)交易的輸出,notary已經(jīng)變成了B,所以可以由notaryB來(lái)確認(rèn),能夠看出這個(gè)普通交易是不需要共識(shí)的。此外,還有一個(gè)具體的執(zhí)行變更過(guò)程,涉及notaryA和B的交互,但是與共識(shí)無(wú)關(guān),讀者可自行驗(yàn)證或閱讀Corda相關(guān)代碼。

若干要點(diǎn)

至此,我們就講完了針對(duì)notary變更的共識(shí)機(jī)制的基本流程,下面通過(guò)幾個(gè)問(wèn)題來(lái)討論/總結(jié)一下這個(gè)共識(shí)機(jī)制有什么特點(diǎn):

  • 總體效率

很明顯,本文介紹的共識(shí)機(jī)制是“notary變更共識(shí)”,也就是說(shuō)凡是不涉及notary變更的交易,仍然是由交易雙方通過(guò)notary直接確認(rèn)的,不需要在多個(gè)notary之間達(dá)成共識(shí)。只有這樣,考慮到notary變更的概率,Corda系統(tǒng)的性能才能大幅度超越每筆交易都需要共識(shí)的區(qū)塊鏈模式,這也是“多中心化”存在的意義。

  • 共識(shí)保障

既然是共識(shí)機(jī)制,必然要滿足達(dá)成共識(shí)所需要的各種條件,這一點(diǎn)與其他系統(tǒng)的共識(shí)機(jī)制是一樣的,例如:如果采用PBFT方式,則必須有2f+1個(gè)以上的節(jié)點(diǎn)是可信的并且在線;如果是采用類(lèi)似比特幣的機(jī)制,則要考慮軟分叉之后的恢復(fù)等。這里筆者只想強(qiáng)調(diào)一點(diǎn),就是在類(lèi)似Corda這種系統(tǒng)中,必須使用類(lèi)似PBFT的“強(qiáng)”共識(shí)機(jī)制,不能允許“分叉”情況的出現(xiàn)。這是因?yàn)橄到y(tǒng)中沒(méi)有“區(qū)塊鏈”這樣的全局?jǐn)?shù)據(jù)結(jié)構(gòu),一旦允許分叉,很難設(shè)計(jì)有效的機(jī)制進(jìn)行恢復(fù),或者說(shuō)恢復(fù)機(jī)制一定會(huì)導(dǎo)致系統(tǒng)引入非常復(fù)雜的處理流程。當(dāng)然,這個(gè)保障在聯(lián)盟鏈的系統(tǒng)中應(yīng)該是比較容易實(shí)現(xiàn)的,現(xiàn)有聯(lián)盟鏈也基本上都是采用強(qiáng)共識(shí)機(jī)制。

  • 惡意notary

拋開(kāi)細(xì)節(jié)不說(shuō),Corda引入notary這種新角色,在共識(shí)機(jī)制中還有沒(méi)有其他影響呢?我想最基本的就是要看看惡意notary與區(qū)塊鏈系統(tǒng)中一般的惡意節(jié)點(diǎn)之間有什么差異,例如:notary變更交易根本不發(fā)出廣播要求達(dá)成共識(shí),或者共識(shí)過(guò)程拒絕了此次變更而notary仍然去完成變更交易。這種情況是普通區(qū)塊鏈系統(tǒng)不會(huì)出現(xiàn)的,也就是惡意notary的特殊之處。解決的辦法也很簡(jiǎn)單,只需要在規(guī)定notary變更交易,必須有“目標(biāo)”notary的參與即可。具體參與方式可以有多種,最簡(jiǎn)單的就是這種交易應(yīng)該讓目標(biāo)notary也參與驗(yàn)證,這樣他就能獲得這個(gè)交易的全部信息,從而知道輸入(STXO)的信息和輸出(UTXO)的全部信息。未來(lái),當(dāng)新的UTXO到自己這里來(lái)交易時(shí),可以查詢(xún)STXO在全網(wǎng)的狀態(tài),看看是否達(dá)成了共識(shí),從而實(shí)現(xiàn)對(duì)惡意notary的防范,并且仍然保持了只有notary變更交易才需要共識(shí)的模式。

除了上述要點(diǎn)之外,筆者提個(gè)“小問(wèn)題”:共識(shí)過(guò)程中,如果有一個(gè)notary發(fā)現(xiàn)需要共識(shí)的對(duì)象在他這里被使用過(guò),從而拒絕這個(gè)共識(shí),而其他notary由于認(rèn)定該對(duì)象未被使用過(guò)而同意,則最后這個(gè)對(duì)象會(huì)被認(rèn)定為未使用過(guò),根據(jù)共識(shí)的定義,這個(gè)對(duì)象“未被使用過(guò)”的共識(shí)仍然能夠達(dá)成??墒侨绻@個(gè)對(duì)象“真的”在這個(gè)反對(duì)的notary那里使用過(guò)怎么辦呢?系統(tǒng)不是出現(xiàn)錯(cuò)誤了嗎?在notary這種模式下,是不是該有個(gè)什么一票否決機(jī)制?這些問(wèn)題,就留給讀者去思考吧。

小結(jié)

本節(jié)給出了基于notary模式的系統(tǒng)的一種特殊的共識(shí)機(jī)制——notary變更交易的共識(shí),建立在這樣一個(gè)前提下:notary模式的系統(tǒng)中普通類(lèi)型的交易既不需要,也不可能通過(guò)共識(shí)來(lái)進(jìn)行確認(rèn)。

這種共識(shí)機(jī)制本身是標(biāo)準(zhǔn)的,也就是說(shuō)原則可以采用任何一種一致的共識(shí)算法,但是從實(shí)踐的角度看,由于沒(méi)有區(qū)塊鏈模型的數(shù)據(jù)結(jié)構(gòu),必須采用類(lèi)似PBFT的強(qiáng)共識(shí)機(jī)制才有意義,否則必然要為解決分叉問(wèn)題涉及大量額外的處理流程。

此外,為了進(jìn)一步防止惡意notary的攻擊,需要在notary變更流程中設(shè)計(jì)更多的環(huán)節(jié)以確保防止雙花攻擊,但是這與共識(shí)機(jī)制的處理流程是無(wú)關(guān)的。

最后,筆者要進(jìn)行一個(gè)“劇透”——本系列文章還有第四部分,在第四部分我們要對(duì)共識(shí)機(jī)制的具體技術(shù)實(shí)現(xiàn)給出描述,并且還要給出一個(gè)令人“驚訝”的事實(shí)和相應(yīng)的解釋?zhuān)凑?qǐng)期待。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容