聯(lián)盟鏈技術(shù)對(duì)比|技術(shù)分析
原創(chuàng)【51CTO.com原創(chuàng)稿件】
摘要
第46屆世界經(jīng)濟(jì)論壇達(dá)沃斯年會(huì)將區(qū)塊鏈與人工智能、自動(dòng)駕駛等一并列入“第四次工業(yè)革命”?!督?jīng)濟(jì)學(xué)人》曾在2015年10月的封面文章《信任的機(jī)器》中介紹區(qū)塊鏈——“比特幣背后的技術(shù)有可能改變經(jīng)濟(jì)運(yùn)行的方式”。
區(qū)塊鏈之所以被稱(chēng)為信任的機(jī)器源于其分布式和不可篡改的兩個(gè)核心特性,這也是區(qū)塊鏈有別于傳統(tǒng)數(shù)據(jù)庫(kù)的核心特性。這里的分布式包含兩層含義:一是傳統(tǒng)的分布式存儲(chǔ),二是區(qū)塊鏈的底層協(xié)議帶來(lái)的協(xié)作性,我們這里更多的是指代其分布式協(xié)作的能力。
黨中央在10月24日下午就區(qū)塊鏈技術(shù)發(fā)展現(xiàn)狀和趨勢(shì)進(jìn)行第十八次集體學(xué)習(xí)時(shí)指出,要抓住區(qū)塊鏈技術(shù)融合、功能拓展、產(chǎn)業(yè)細(xì)分的契機(jī),發(fā)揮區(qū)塊鏈在促進(jìn)數(shù)據(jù)共享、優(yōu)化業(yè)務(wù)流程、降低運(yùn)營(yíng)成本、提升協(xié)同效率、建設(shè)可信體系等方面的作用。我們認(rèn)為正是由于區(qū)塊鏈”可信的機(jī)器”的特性使其有在社會(huì)的諸多領(lǐng)域發(fā)揮重要作用的潛力。
在區(qū)塊鏈中主要通過(guò)共識(shí)算法、智能合約、治理、跨鏈、隱私等來(lái)實(shí)現(xiàn)其“可信協(xié)作”,所以我們將從這幾個(gè)方面并結(jié)合企業(yè)應(yīng)用場(chǎng)景來(lái)分析底層技術(shù)的差異,來(lái)幫助企業(yè)用戶(hù)更好地做出選擇。同時(shí)我們也會(huì)從傳統(tǒng)企業(yè)軟件的可維護(hù)性、性能、開(kāi)發(fā)工具、擴(kuò)展性、軟件協(xié)議等方面來(lái)進(jìn)行分析和對(duì)比。
我們選擇了市面上歷史最悠久,用戶(hù)范圍最廣的幾個(gè)開(kāi)源底層進(jìn)行對(duì)比。
FISCO BCOS誕生于2017年,由金鏈盟推出,是標(biāo)準(zhǔn)的國(guó)產(chǎn)底層。金鏈盟是由深圳市金融科技協(xié)會(huì)、深圳前海微眾銀行、深證通等二十余家金融機(jī)構(gòu)和科技企業(yè)于2016年5月31日共同發(fā)起成立的非營(yíng)利性組織。
CITA 是一個(gè)開(kāi)源的區(qū)塊鏈操作系統(tǒng)內(nèi)核,以高穩(wěn)定性,高性能,高可擴(kuò)展性為設(shè)計(jì)目標(biāo)。CITA 開(kāi)源項(xiàng)目由秘猿科技 Cryptape 于2016年發(fā)起。目前由溪塔科技等CITAHub社區(qū)企業(yè)共同維護(hù)。CITA 采用微服務(wù)架構(gòu)設(shè)計(jì),提供豐富的開(kāi)發(fā)工具集,靈活的區(qū)塊鏈治理工具,開(kāi)發(fā)者可為不同類(lèi)型的區(qū)塊鏈網(wǎng)絡(luò)進(jìn)行二次開(kāi)發(fā)或配置。
Hyperledger Fabric是分布式賬本解決方案的平臺(tái),該平臺(tái)以模塊化架構(gòu)為基礎(chǔ),提供高度的機(jī)密性,靈活性和可擴(kuò)展性。 它旨在支持不同組件的可插拔實(shí)現(xiàn),并適應(yīng)整個(gè)經(jīng)濟(jì)生態(tài)系統(tǒng)中存在的復(fù)雜性。Fabric最早由IBM設(shè)計(jì)和開(kāi)發(fā),2015年將其源代碼奉獻(xiàn)給了Linux基金會(huì)的Hyperledger項(xiàng)目。
共識(shí)和交易流程
共識(shí)機(jī)制作為區(qū)塊鏈的靈魂,無(wú)論是公鏈還是聯(lián)盟鏈,共識(shí)機(jī)制都從根本上限制了區(qū)塊鏈的交易處理能力和擴(kuò)展性,同時(shí)也是其分布式協(xié)作能力的基礎(chǔ)。共識(shí)是分布式系統(tǒng)中節(jié)點(diǎn)對(duì)數(shù)據(jù)或網(wǎng)絡(luò)最終狀態(tài)達(dá)成的協(xié)議。由于網(wǎng)絡(luò)環(huán)境和節(jié)點(diǎn)狀態(tài)的不可控,共識(shí)機(jī)制需要同時(shí)考慮性能、可靠性、安全性等多方面問(wèn)題。共識(shí)機(jī)制從大的方面,可分為 Nakamoto Consensus等無(wú)需準(zhǔn)入的共識(shí)機(jī)制,和PBFT等需要準(zhǔn)入的共識(shí)機(jī)制兩大類(lèi)。
Nakamoto 共識(shí)在公鏈上應(yīng)用廣泛,但是它的概率模型在提供較高可靠性的同時(shí),犧牲了效率。在具體商業(yè)應(yīng)用環(huán)境中,許可機(jī)制已經(jīng)保證了一定程度上的節(jié)點(diǎn)可信度,這樣的前提下,用戶(hù)更關(guān)心執(zhí)行效率和最終確定性。這是BFT類(lèi)共識(shí)在聯(lián)盟鏈中流行的原因。
下面先分別介紹BCOS、CITA和 Fabirc共識(shí)技術(shù)實(shí)現(xiàn),我們?cè)購(gòu)男阅?,?yīng)用場(chǎng)景,擴(kuò)展性和安全性等幾個(gè)方面來(lái)進(jìn)行對(duì)比分析。
技術(shù)實(shí)現(xiàn)
BCOS共識(shí)機(jī)制效率相對(duì)較低
BCOS的共識(shí)機(jī)制采用了傳統(tǒng)的PBFT共識(shí),其共識(shí)流程主要包括Pre-prepare, Prepare和Commit三個(gè)階段:
1.Pre-prepare:Leader節(jié)點(diǎn)執(zhí)行區(qū)塊,產(chǎn)生簽名,并將Proposal廣播給其他共識(shí)節(jié)點(diǎn);
2.Prepare:共識(shí)節(jié)點(diǎn)驗(yàn)證Proposal并廣播簽名,同時(shí)收集其他節(jié)點(diǎn)簽名,節(jié)點(diǎn)收集到2f + 1的簽名后,開(kāi)始廣播Commit包;
3.Commit:Leader節(jié)點(diǎn)收集Commit包,節(jié)點(diǎn)收集滿(mǎn)2*f + 1的Commit包后,更新本地?cái)?shù)據(jù)庫(kù)并廣播給其他節(jié)點(diǎn),其他節(jié)點(diǎn)收到之后更新本地?cái)?shù)據(jù)庫(kù)。
下圖為標(biāo)準(zhǔn)的一次PBFT的過(guò)程:
在區(qū)塊鏈中因?yàn)楣沧R(shí)節(jié)點(diǎn)之間需要統(tǒng)一Commit階段的投票,所以最后的Commit階段略為不同:Leader節(jié)點(diǎn)收到2*f + 1 的Commit 包之后會(huì)將最終的Commit 包廣播給其他共識(shí)節(jié)點(diǎn)來(lái)統(tǒng)一投票。
在整個(gè)共識(shí)流程中,交易在Pre-prepare階段執(zhí)行一次,在Prepare階段驗(yàn)證一次,BCOS中使用的傳統(tǒng)PBFT流程為先執(zhí)行再驗(yàn)證的模式,包含了兩個(gè)執(zhí)行交易的時(shí)間長(zhǎng)度。
CITA采用高效的自主研發(fā)的共識(shí)協(xié)議
CITA實(shí)現(xiàn)了根據(jù)區(qū)塊鏈連續(xù)共識(shí)特點(diǎn)而優(yōu)化的CITA-BFT。區(qū)塊鏈?zhǔn)且粋€(gè)連續(xù)共識(shí)的過(guò)程,CITA將交易的執(zhí)行和共識(shí)進(jìn)行拆分,避免了兩次執(zhí)行的問(wèn)題。根據(jù)復(fù)制狀態(tài)機(jī)的原理:起始狀態(tài)一致,執(zhí)行交易順序一致,執(zhí)行過(guò)程是確定的,三個(gè)條件都滿(mǎn)足的情況下就可以保證最終結(jié)果一定會(huì)一致。在區(qū)塊鏈中起始狀態(tài)由創(chuàng)世塊來(lái)保證一致,虛擬機(jī)是完全確定的,所以只要保證交易順序一致就可以保證其最終結(jié)果一定一致。在區(qū)塊鏈中Block的preHash已經(jīng)包含了上個(gè)塊交易處理之后的世界狀態(tài)信息。CITA-BFT對(duì)當(dāng)前區(qū)塊的交易順序和上個(gè)區(qū)塊的執(zhí)行結(jié)果進(jìn)行共識(shí)。這樣在共識(shí)過(guò)程中不需要去執(zhí)行交易,而只需要在共識(shí)完之后進(jìn)行一次交易處理,大大提高了整個(gè)鏈的吞吐量。CITA-BFT是針對(duì)區(qū)塊鏈連續(xù)共識(shí)的特點(diǎn)進(jìn)行了優(yōu)化,采用了先共識(shí)后處理的方式,使得共識(shí)的過(guò)程不必執(zhí)行交易,只需要共識(shí)完成之后執(zhí)行一次交易即可。經(jīng)過(guò)驗(yàn)證,在最簡(jiǎn)單的存證交易時(shí),共識(shí)性能有35%左右提升。
CITA-BFT避免了共識(shí)協(xié)議最后一輪Leader廣播的過(guò)程。在傳統(tǒng)的PBFT中在最后的Commit階段,需要Leader收到足夠的Commit包并廣播給其他節(jié)點(diǎn)。區(qū)塊鏈?zhǔn)且粋€(gè)連續(xù)共識(shí)的過(guò)程,在CITA-BFT中,Block中共識(shí)投票是上一個(gè)區(qū)塊的投票,所以合并了Commit階段的Leader廣播最終區(qū)塊過(guò)程和下一個(gè)高度的Proposal階段,這樣節(jié)省了一輪廣播過(guò)程,通過(guò)下一個(gè)高度Proposal的過(guò)程統(tǒng)一了Commit投票信息。
CITA-BFT采用Proposal預(yù)處理技術(shù)使共識(shí)和執(zhí)行能夠并行進(jìn)行,極大地提高的系統(tǒng)性能。由于聯(lián)盟鏈在多數(shù)情況下,網(wǎng)絡(luò)狀況良好能在一輪共識(shí)流程中完成共識(shí),CITA中引入了Proposal預(yù)處理的技術(shù):在Pre-prepare階段,節(jié)點(diǎn)在收到Proposal之后可以直接處理交易,而不必等到共識(shí)流程完成,等到共識(shí)流程完成之后再將共識(shí)結(jié)果通知交易處理器。在傳統(tǒng)的PBFT的過(guò)程中,交易處理和共識(shí)是串行的,引入Proposal預(yù)處理之后,可以使得共識(shí)的Prepare階段Commit階段和交易處理并行進(jìn)行,大大提高了整個(gè)系統(tǒng)的吞吐量。經(jīng)測(cè)試,對(duì)于簡(jiǎn)單的交易處理,有10%到20%左右的性能提升。
在CITA中采用了CompactBlock的技術(shù)來(lái)壓縮共識(shí)區(qū)塊的大小,提高網(wǎng)絡(luò)帶寬利用率。Block中的交易已經(jīng)單獨(dú)廣播過(guò)一次,所以共識(shí)Block中只需要包含交易ID即可,這樣可以大大降低區(qū)塊消息的大小。經(jīng)測(cè)試在網(wǎng)絡(luò)條件較好的情況下,對(duì)于簡(jiǎn)單的交易處理,有5%到10%的性能提升。
Fabric共識(shí)機(jī)制限制業(yè)務(wù)效率提升
Fabric將其節(jié)點(diǎn)角色分為:排序節(jié)點(diǎn),背書(shū)節(jié)點(diǎn),提交節(jié)點(diǎn)??蛻?hù)端首先將交易請(qǐng)求發(fā)送給背書(shū)節(jié)點(diǎn),背書(shū)節(jié)點(diǎn)執(zhí)行后將read/write set及其簽名返回給客戶(hù)端,客戶(hù)端收集到足夠相同的結(jié)果后,將read/writeset、多組簽名和交易請(qǐng)求組成簽名后的交易,發(fā)送給排序節(jié)點(diǎn),排序節(jié)點(diǎn)組成區(qū)塊之后,廣播給提交節(jié)點(diǎn),提交節(jié)點(diǎn)驗(yàn)證read/write set和簽名數(shù)是否滿(mǎn)足,標(biāo)記結(jié)果并保存合法的結(jié)果到各自的賬本。
在Fabric中由于交易的執(zhí)行是非確定性的,這點(diǎn)不同于BCOS和CITA的設(shè)計(jì)理念。所以需要背書(shū)節(jié)點(diǎn)先執(zhí)行交易,并由客戶(hù)端根據(jù)背書(shū)策略進(jìn)行對(duì)比結(jié)果,再發(fā)給排序節(jié)點(diǎn),最終由提交節(jié)點(diǎn)驗(yàn)證并更新各自的數(shù)據(jù)庫(kù)。我們可以理解為:共識(shí)狀態(tài)的過(guò)程是由客戶(hù)端、背書(shū)節(jié)點(diǎn)、提交節(jié)點(diǎn)共同參與完成的;排序節(jié)點(diǎn)只負(fù)責(zé)交易順序的共識(shí),而不負(fù)責(zé)狀態(tài)共識(shí)。在交易狀態(tài)共識(shí)和排序可以分別采用不同的策略。比如交易狀態(tài)可以采用超過(guò)3/4的狀態(tài)一致,而排序節(jié)點(diǎn)的共識(shí)使用傳統(tǒng)的Raft或者Solo共識(shí),采用傳統(tǒng)CFT共識(shí)即可滿(mǎn)足多數(shù)場(chǎng)景。這里的問(wèn)題是交易中需要包含用戶(hù)的簽名,以及多個(gè)背書(shū)節(jié)點(diǎn)的簽名,以及read/write set,這樣導(dǎo)致交易非常大。
Fabric在交易狀態(tài)有沖突時(shí),例如A和B之間頻繁轉(zhuǎn)帳這種場(chǎng)景,因?yàn)槊抗P交易都會(huì)修改AB賬戶(hù)的余額,所以會(huì)造成交易沖突。沖突交易每個(gè)塊最多只能有一個(gè)交易被處理,這將大大限制業(yè)務(wù)合約的場(chǎng)景。
性能對(duì)比
最佳">CITA共識(shí)性能最佳
BCOS:
•傳統(tǒng)的PBFT
•共識(shí)過(guò)程中會(huì)重復(fù)執(zhí)行交易,共識(shí)效率較低
CITA:
•先共識(shí)再執(zhí)行,只執(zhí)行一次交易,整體效率較高
•優(yōu)化Commit階段的Leader廣播過(guò)程,減少共識(shí)時(shí)間
•Proposal預(yù)執(zhí)行技術(shù)使得共識(shí)和執(zhí)行并行,提高整體性能
•CompactBlock技術(shù)提高帶寬利用率
Fabric:
•執(zhí)行(驗(yàn)證)和排序可以采用不同的共識(shí)策略,比較靈活
•交易需要多個(gè)背書(shū)節(jié)點(diǎn)簽名和read/write集合會(huì)導(dǎo)致交易非常大
對(duì)比可以看出BCOS采用傳統(tǒng)PBFT,共識(shí)效率較低;CITA采用了自主研發(fā)的CITA-BFT,共識(shí)和交易處理有50%以上的性能提升;Fabric將整個(gè)流程拆分為執(zhí)行、排序、驗(yàn)證,增加了靈活性,但是驗(yàn)證和執(zhí)行的分離導(dǎo)致交易非常大。
應(yīng)用場(chǎng)景
Fabirc共識(shí)機(jī)制限制了業(yè)務(wù)場(chǎng)景
BCOS/CITA:都是BFT類(lèi)共識(shí),適合多數(shù)的聯(lián)盟鏈場(chǎng)景,由參與方、監(jiān)管方和可信第三方組成共識(shí)節(jié)點(diǎn)。
Fabric:將共識(shí)的流程拆分為執(zhí)行,排序和驗(yàn)證,具有更好的靈活性,但是由此帶來(lái)交易結(jié)構(gòu)非常大,而且沖突交易每個(gè)塊只能上鏈一個(gè)交易,大大限制了業(yè)務(wù)合約的場(chǎng)景。比如對(duì)于一個(gè)統(tǒng)計(jì)投票的合約,有N個(gè)投票者,每個(gè)投票人員通過(guò)發(fā)送交易進(jìn)行投票,因?yàn)榭偟耐镀苯Y(jié)果是共享狀態(tài),這種情況下每個(gè)區(qū)塊只能處理一筆交易。
擴(kuò)展性
|
BCOS |
CITA |
Fabric |
節(jié)點(diǎn)擴(kuò)展性 |
方便節(jié)點(diǎn)的增刪 |
方便節(jié)點(diǎn)的增刪 |
背書(shū)節(jié)點(diǎn)增刪方便,排序節(jié)點(diǎn)增刪方便, 背書(shū)策略易修改, 排序策略易修改。 |
節(jié)點(diǎn)模塊化 |
共識(shí)/執(zhí)行耦合,不易替換和定制化 |
共識(shí)和執(zhí)行模塊分離,方便替換和定制化 |
執(zhí)行、排序、驗(yàn)證分離,節(jié)點(diǎn)功能可以根據(jù)情況自由組合 |
安全性
|
BCOS |
CITA |
Fabric |
執(zhí)行共識(shí) |
BFT類(lèi)算法只要保證2/3+1個(gè)節(jié)點(diǎn)誠(chéng)實(shí)即可正常出塊,保證1/3個(gè)共識(shí)節(jié)點(diǎn)誠(chéng)實(shí)即可保證結(jié)果正確。 |
BFT類(lèi)算法只要保證2/3+1個(gè)節(jié)點(diǎn)誠(chéng)實(shí)即可正常出塊,保證1/3個(gè)共識(shí)節(jié)點(diǎn)誠(chéng)實(shí)即可保證結(jié)果正確。 |
不同的背書(shū)策略安全性不同,既可以是安全性較高的背書(shū)節(jié)點(diǎn)全部通過(guò),也可以是單一背書(shū)節(jié)點(diǎn)通過(guò)的策略。 |
交易排序上鏈 |
BFT類(lèi)算法只要保證2/3+1個(gè)節(jié)點(diǎn)誠(chéng)實(shí)即可保證交易會(huì)上鏈 |
BFT類(lèi)算法只要保證2/3+1個(gè)節(jié)點(diǎn)誠(chéng)實(shí)即可保證交易會(huì)上鏈 |
排序可以采用Raft或者Solo共識(shí),Leader節(jié)點(diǎn)具有較大權(quán)限可以拒絕交易。 |
交易記錄的不可篡改 |
鏈?zhǔn)浇Y(jié)構(gòu)保證交易記錄不會(huì)篡改 |
鏈?zhǔn)浇Y(jié)構(gòu)保證交易記錄不會(huì)篡改 |
鏈?zhǔn)浇Y(jié)構(gòu)保證交易記錄不會(huì)篡改 |
交易狀態(tài)一致性 |
BFT類(lèi)算法只要保證2/3+1個(gè)節(jié)點(diǎn)誠(chéng)實(shí)即可正常出塊,保證1/3個(gè)共識(shí)節(jié)點(diǎn)誠(chéng)實(shí)即可保證結(jié)果正確。 |
BFT類(lèi)算法只要保證2/3+1個(gè)節(jié)點(diǎn)誠(chéng)實(shí)即可正常出塊,保證1/3個(gè)共識(shí)節(jié)點(diǎn)誠(chéng)實(shí)即可保證結(jié)果正確。 |
排序和驗(yàn)證都不進(jìn)行最終狀態(tài)的共識(shí),由提交節(jié)點(diǎn)來(lái)驗(yàn)證交易,并分別更新各自狀態(tài)。只有等待下一個(gè)相關(guān)交易讀取狀態(tài)或者客戶(hù)端主動(dòng)查詢(xún),由客戶(hù)端判斷狀態(tài)是否一致。 |
可以看到,BCOS和CITA都使用類(lèi)BFT的共識(shí),所以在安全性方面分析現(xiàn)有的BFT協(xié)議即可,有用比較高的安全邊界。
對(duì)于Fabric,由于執(zhí)行、排序、提交節(jié)點(diǎn)職能的分離,且執(zhí)行(驗(yàn)證)和排序可以分別采用不同的共識(shí)策略,安全策略可以由用戶(hù)自由把握,客戶(hù)端參與狀態(tài)和執(zhí)行的共識(shí)。
智能合約
智能合約一詞有一定的誤導(dǎo)性,智能往往給人帶來(lái)一定的神秘色彩,就其合約功能本身來(lái)講并無(wú)”智能性”。在區(qū)塊鏈出現(xiàn)之前,所有的系統(tǒng)都是采用中心化的架構(gòu),監(jiān)管機(jī)構(gòu)和用戶(hù)無(wú)法驗(yàn)證和保證系統(tǒng)功能的正確性,無(wú)法確保數(shù)據(jù)未被惡意修改,無(wú)法保證數(shù)據(jù)的安全性。由于區(qū)塊鏈的出現(xiàn),使得在不依賴(lài)于第三方的情況下,能夠可信地進(jìn)行交易,而且交易可追蹤無(wú)法逆轉(zhuǎn)。智能合約的核心含義在于:在區(qū)塊鏈基礎(chǔ)上實(shí)現(xiàn)可信計(jì)算,并由區(qū)塊鏈協(xié)議保證的可追蹤和無(wú)法逆轉(zhuǎn)。
在比特幣中交易主要用于點(diǎn)對(duì)點(diǎn)的現(xiàn)金支付,以太坊由于引入圖靈完備的智能合約被稱(chēng)為區(qū)塊鏈2.0。雖然理論上以太坊上的智能合約是圖靈完備的,但是受限于交易手續(xù)費(fèi)、合約指令、區(qū)塊Gas上限、節(jié)點(diǎn)可信度等,公鏈智能合約并不適用于現(xiàn)有的企業(yè)開(kāi)發(fā)。
聯(lián)盟鏈由于節(jié)點(diǎn)數(shù)量有限,且節(jié)點(diǎn)運(yùn)營(yíng)方可以采用高性能的硬件設(shè)備,以及底層協(xié)議支持等,更適合企業(yè)開(kāi)發(fā)。首先我們介紹三者智能合約的技術(shù)實(shí)現(xiàn),再分別從安全性、易用性、可用性三方面進(jìn)行對(duì)比分析。
技術(shù)實(shí)現(xiàn)
BCOS和CITA均支持EVM和預(yù)編譯合約。借助于Ethereum 智能合約的完善的生態(tài)系統(tǒng),兩者都在其基礎(chǔ)之上做了定制化,有豐富的合約編寫(xiě)和測(cè)試工具。
對(duì)于預(yù)編譯合約需要開(kāi)發(fā)者對(duì)區(qū)塊鏈系統(tǒng)有一定的了解,需要較高的門(mén)檻。當(dāng)前支持EVM的語(yǔ)言主要是Solidity,Solidity合約可以通過(guò)交易進(jìn)行部署,在調(diào)用時(shí)將合約代碼加載到虛擬機(jī)中。
Fabric的合約通過(guò)ChainCode的方式以Docker的方式進(jìn)行線(xiàn)下安裝,然后通過(guò)交易進(jìn)行激活。ChainCode合約的部署相對(duì)較重,但支持多種語(yǔ)言(Go,Javascript等),合約的部署和更新以線(xiàn)下方式進(jìn)行更新,合約代碼并沒(méi)有進(jìn)行共識(shí),可以將合約看成黑盒,只需要保證其輸入和輸出正確即可,并不關(guān)心其內(nèi)部邏輯的具體實(shí)現(xiàn)。
由于Fabric采用了傳統(tǒng)的語(yǔ)言進(jìn)行合約編寫(xiě),雖然開(kāi)發(fā)者不需要學(xué)習(xí)新的語(yǔ)言,但是由于虛擬機(jī)的不確定性,ChainCode的方式只適合Fabric的先執(zhí)行再共識(shí)再驗(yàn)證的共識(shí)方式,并不具備通用性。
安全性
安全性是智能合約有別于其他程序的主要特征,這里的安全性,包含確定性、可驗(yàn)證、可審計(jì)、可追蹤等特性。
由于BCOS和CITA在智能合約設(shè)計(jì)理念上接近,我們將兩者放入同一欄中。
|
BCOS/CITA |
Fabric |
確定性 |
完全確定 |
由于合約采用通用語(yǔ)言,合約執(zhí)行存在不確定性,且執(zhí)行環(huán)境有存在差異的可能性,所以不能100%保證合約計(jì)算的一致性和正確性。 |
可驗(yàn)證、可審計(jì) |
鏈上部署、調(diào)用合約,合約代碼保存在鏈上,可以對(duì)合約執(zhí)行進(jìn)行驗(yàn)證、審計(jì) |
合約部署分別由背書(shū)節(jié)點(diǎn)獨(dú)自部署和運(yùn)行,不在鏈上進(jìn)行部署和共識(shí),鏈下共識(shí),存在節(jié)點(diǎn)誤部署和修改代碼的風(fēng)險(xiǎn),無(wú)法通過(guò)區(qū)塊鏈協(xié)議保證合約的不可篡改,對(duì)驗(yàn)證和審計(jì)不夠友好。 |
不可逆 |
區(qū)塊鏈協(xié)議和數(shù)據(jù)結(jié)構(gòu)保證 |
區(qū)塊鏈協(xié)議和數(shù)據(jù)結(jié)構(gòu)保證 |
可追蹤 |
通過(guò)交易追蹤合約的部署、調(diào)用、更新 |
通過(guò)交易追蹤合約的激活和調(diào)用,但是合約代碼變更不可追蹤。 |
對(duì)比可以看出由于BCOS/CITA交易是鏈上執(zhí)行的,所以BCOS/CITA的智能合約更具有確定性、可驗(yàn)證、可審計(jì)、不可逆、可追蹤的特點(diǎn)。
Fabric在合約代碼由背書(shū)節(jié)點(diǎn)各自部署和升級(jí),驗(yàn)證性、審計(jì)性、可追蹤性無(wú)法保證。但是由于在Fabric的設(shè)計(jì)理念中,合約執(zhí)行后再由客戶(hù)端進(jìn)行驗(yàn)證,我們可以認(rèn)為合約最終的結(jié)果是由客戶(hù)端和背書(shū)節(jié)點(diǎn)共同決定的,只要交易結(jié)果符合背書(shū)策略并且符合用戶(hù)預(yù)期,對(duì)于合約代碼的驗(yàn)證性要求相對(duì)就沒(méi)有那么重要了。
易用性
BCOS/CITA在合約易用性上略勝于Fabric
|
BCOS/CITA |
Fabric |
語(yǔ)言友好度 |
多數(shù)場(chǎng)景下使用Solidity語(yǔ)言,經(jīng)過(guò)長(zhǎng)時(shí)間發(fā)展,Solidity已較為成熟,易上手 |
支持傳統(tǒng)語(yǔ)言,易上手 |
工具鏈 |
兩者都基于Solidity的工具鏈進(jìn)行了深度定制化,工具鏈完善 |
傳統(tǒng)語(yǔ)言,工具鏈完善 |
部署 |
通過(guò)交易,方便部署,鏈上部署 |
由背書(shū)節(jié)點(diǎn)通過(guò)Docker分別部署,部署成本高 |
調(diào)用 |
合約之間可以方便調(diào)用 |
合約調(diào)用必須在同一個(gè)ChainCode中 |
升級(jí) |
通過(guò)部署新合約的方式進(jìn)行升級(jí) |
背書(shū)節(jié)點(diǎn)分別去升級(jí) |
BCOS/CITA支持以太坊EVM并且對(duì)其工具鏈進(jìn)行深度優(yōu)化,對(duì)開(kāi)發(fā)者更友好,合約的部署、調(diào)用、升級(jí)都通過(guò)交易進(jìn)行,更輕量和方便。
可用性
|
BCOS |
CITA |
Fabric |
復(fù)雜合約 |
通過(guò)設(shè)置區(qū)塊交易上限使區(qū)塊鏈可以處理復(fù)雜度非常高的合約 |
通過(guò)設(shè)置區(qū)塊交易上限使區(qū)塊鏈可以處理復(fù)雜度非常高的合約 |
背書(shū)節(jié)點(diǎn)分別執(zhí)行合約,并不對(duì)合約時(shí)間和復(fù)雜度進(jìn)行限制 |
并行計(jì)算 |
支持并行計(jì)算,但是需要在交易中預(yù)先設(shè)置沖突狀態(tài),場(chǎng)景有限且使用難度比較高 |
不支持并行計(jì)算,交易依次執(zhí)行 |
不支持并行計(jì)算,交易依次執(zhí)行。同一個(gè)區(qū)塊中不允許有沖突交易,否則后續(xù)交易會(huì)失敗 |
指令擴(kuò)展 |
通過(guò)預(yù)編譯合約進(jìn)行指令擴(kuò)展 |
通過(guò)預(yù)編譯合約進(jìn)行指令擴(kuò)展 |
傳統(tǒng)語(yǔ)言,指令豐富,不需要擴(kuò)展。 |
定時(shí)任務(wù) |
不支持 |
區(qū)塊鏈內(nèi)置合約定時(shí)執(zhí)行功能 |
不支持 |
BCOS/CITA/Fabric都可以應(yīng)對(duì)企業(yè)復(fù)雜的業(yè)務(wù)邏輯,支持比較復(fù)雜的合約計(jì)算和處理,同時(shí)CITA支持鏈上定時(shí)任務(wù)。
性能
經(jīng)過(guò)區(qū)塊鏈底層技術(shù)最近幾年的發(fā)展,聯(lián)盟鏈的性能已經(jīng)不再是其最主要的瓶頸。
BCOS官方文檔并未提供性能數(shù)據(jù),我們只能根據(jù)第三方提供的數(shù)據(jù)來(lái)判斷,我們找到了兩個(gè)相對(duì)可靠的信息來(lái)源。中國(guó)信通院可信區(qū)塊鏈最新評(píng)測(cè)(2019年11-19日),BCOS單鏈TPS超2萬(wàn)。在2019年7月底的一篇新聞稿”當(dāng)測(cè)試團(tuán)隊(duì)說(shuō)區(qū)塊鏈性能達(dá)到10000TPS的那一刻,張開(kāi)翔在微信群里給團(tuán)隊(duì)發(fā)出了人生中最大的紅包。“。因?yàn)閮纱螠y(cè)試數(shù)據(jù)均未提供測(cè)試用的環(huán)境、節(jié)點(diǎn)數(shù)、使用的共識(shí)協(xié)議(BCOS支持Raft)等,推測(cè)這里可能是分別使用了不同的共識(shí)方法和節(jié)點(diǎn)數(shù)進(jìn)行的測(cè)試。
CITA在官方文檔中最新版本的交易性能已經(jīng)可以達(dá)到 15,000+ TPS,數(shù)據(jù)來(lái)自 CITA 0.16 版本(2018年5月15日),在四臺(tái) 32 核,64G 的云服務(wù)器上部署 4個(gè)節(jié)點(diǎn),每臺(tái)服務(wù)器配置百兆帶寬。
Fabric官方并未提供其性能數(shù)據(jù)。根據(jù)第三方提供的數(shù)據(jù)(https://arxiv.org/pdf/1801.10228.pdf),在32核CPU,10節(jié)點(diǎn)的情況下,性能可以到3400左右。根據(jù)這份報(bào)告背書(shū)節(jié)點(diǎn)數(shù)對(duì)性能影響并不大,因?yàn)楸硶?shū)節(jié)點(diǎn)并不實(shí)際參與共識(shí)。
現(xiàn)階段聯(lián)盟的性能已經(jīng)有了長(zhǎng)足的進(jìn)步,相對(duì)落地場(chǎng)景而言,性能已經(jīng)不再是最主要的瓶頸。同時(shí)國(guó)產(chǎn)聯(lián)盟鏈在性能方面已經(jīng)不輸于國(guó)外的大品牌,甚至已經(jīng)領(lǐng)先于國(guó)外。
存儲(chǔ)
區(qū)塊鏈的存儲(chǔ)從內(nèi)容方面講主要包括兩個(gè)方面:區(qū)塊和交易存儲(chǔ)、世界狀態(tài)存儲(chǔ)。我們先分別介紹各自的實(shí)現(xiàn)方式,再?gòu)闹С謹(jǐn)?shù)據(jù)庫(kù)類(lèi)型、存儲(chǔ)效率、可擴(kuò)展性、數(shù)據(jù)維護(hù)等方面進(jìn)行對(duì)比分析。
實(shí)現(xiàn)方式
BCOS的狀態(tài)存儲(chǔ)支持兩種存儲(chǔ)模式
對(duì)于區(qū)塊的保存,BCOS交易列表,交易回執(zhí)等都采用了傳統(tǒng)的MPT方式保存。對(duì)于世界狀態(tài),BCOS采用了兩種存儲(chǔ)模式:storage state和MPT state。MPT state支持RocksDB和External存儲(chǔ),MPT存儲(chǔ)在保存歷史狀態(tài)的同時(shí),最大化減少存儲(chǔ)數(shù)據(jù)。Storage State 支持RocksDB、MySQL、External,使用storage state存儲(chǔ)時(shí),犧牲了部分的可追溯性,但帶來(lái)了性能上的提升,同時(shí)能支持SQL語(yǔ)句的查詢(xún)和統(tǒng)計(jì)。因?yàn)槭澜鐮顟B(tài)始終是可以通過(guò)交易進(jìn)行還原,所以對(duì)于犧牲部分可追溯性而換取性能的提升和狀態(tài)查詢(xún)是可以接受的。
CITA支持RocksDB、External存儲(chǔ)。使用MPT保存狀態(tài),使用Simple Merkle Tree保存交易和交易回執(zhí)。對(duì)于狀態(tài)存儲(chǔ)CITA選擇了經(jīng)典的MPT存儲(chǔ),保存歷史狀態(tài)的同時(shí),最大化減少存儲(chǔ)數(shù)據(jù)。而對(duì)于交易和交易回執(zhí)使用Simple Merkle Tree存儲(chǔ),可以?xún)?yōu)化存儲(chǔ)數(shù)據(jù)量和減少Hash計(jì)算。
Fabric的區(qū)塊存儲(chǔ),同樣采用了MPT的方式進(jìn)行保存。對(duì)于世界狀態(tài)的存儲(chǔ)支持KV和CouchDB存儲(chǔ),在世界狀態(tài)存儲(chǔ)時(shí),F(xiàn)abric不支持歷史狀態(tài)的保存,同時(shí)有性能上的提升,并支持豐富的條件查詢(xún)和統(tǒng)計(jì)。
對(duì)比分析
|
BCOS |
CITA |
Fabric |
分布式數(shù)據(jù)庫(kù)支持 |
支持 |
支持 |
支持 |
交易/回執(zhí)存儲(chǔ) |
支持KV數(shù)據(jù)庫(kù) |
支持KV數(shù)據(jù)庫(kù) |
支持KV數(shù)據(jù)庫(kù) |
交易/回執(zhí)存儲(chǔ)性能 |
使用MPT存儲(chǔ),性能一般 |
使用Simple Merkle Tree,存儲(chǔ)和計(jì)算性能略好于MPT |
使用MPT存儲(chǔ),性能一般。每個(gè)交易均需要保留背書(shū)節(jié)點(diǎn)的簽名,交易數(shù)據(jù)要大很多 |
KV狀態(tài)存儲(chǔ) |
支持兩種模式: KV數(shù)據(jù)庫(kù),保留歷史可追溯; SQL數(shù)據(jù)庫(kù),不保留歷史數(shù)據(jù)不可追溯,支持條件查詢(xún) |
支持KV數(shù)據(jù)庫(kù),保留歷史可追溯。 |
支持KV數(shù)據(jù)庫(kù),不保留歷史不可追溯。 支持CouchDB,不保留歷史不可追溯,支持條件查詢(xún) |
狀態(tài)快照 |
不支持 |
支持快照,對(duì)世界狀態(tài)歷史進(jìn)行裁剪,減少歷史狀態(tài)的存儲(chǔ) |
不支持 |
對(duì)比來(lái)看:
CITA在交易的存儲(chǔ)結(jié)構(gòu)上做了優(yōu)化和改進(jìn),提供了快照功能對(duì)世界狀態(tài)的歷史進(jìn)行裁剪。
BCOS世界狀態(tài)的存儲(chǔ)模式上,支持兩種不同的模式,允許在犧牲一部分狀態(tài)可追溯性上,提升性能和支持豐富的SQL查詢(xún)。
Fabric的世界狀態(tài)存儲(chǔ)不保留歷史狀態(tài),支持世界狀態(tài)的條件查詢(xún)。
我們認(rèn)為在交易存儲(chǔ)方面,節(jié)點(diǎn)必須要保留歷史記錄,而對(duì)于世界狀態(tài)的歷史存儲(chǔ),可以通過(guò)交易進(jìn)行還原,在這種情況下BCOS/Fabric為用戶(hù)提供較好的查詢(xún)功能和較高的性能是一個(gè)不錯(cuò)的取舍。
治理
聯(lián)盟鏈不同于公鏈的最大不同之處在于其治理方式的不同,對(duì)于公鏈來(lái)講由于其是開(kāi)放的系統(tǒng)需要一定的經(jīng)濟(jì)激勵(lì)來(lái)協(xié)調(diào)不同角色間的關(guān)系,而聯(lián)盟鏈由于節(jié)點(diǎn)是準(zhǔn)入機(jī)制,所以其治理方式與公鏈有非常大的不同。對(duì)于聯(lián)盟鏈來(lái)講,其治理主要包含:節(jié)點(diǎn)管理、帳號(hào)權(quán)限、經(jīng)濟(jì)模型。
節(jié)點(diǎn)管理
對(duì)于BCOS和CITA來(lái)講,節(jié)點(diǎn)主要分為兩類(lèi):共識(shí)節(jié)點(diǎn)和普通節(jié)點(diǎn)。共識(shí)節(jié)點(diǎn)負(fù)責(zé)共識(shí)出塊,普通節(jié)點(diǎn)只能同步數(shù)據(jù)并驗(yàn)證數(shù)據(jù)而沒(méi)有打包交易的權(quán)力。
對(duì)于Fabric,節(jié)點(diǎn)分為背書(shū)節(jié)點(diǎn),排序節(jié)點(diǎn),提交節(jié)點(diǎn)。背書(shū)節(jié)點(diǎn)負(fù)責(zé)執(zhí)行交易并返回結(jié)果,排序節(jié)點(diǎn)負(fù)責(zé)對(duì)交易排序并打包出塊,提交節(jié)點(diǎn)負(fù)責(zé)驗(yàn)證交易并更新?tīng)顟B(tài)。
|
BCOS |
CITA |
Fabric |
共識(shí)節(jié)點(diǎn) |
通過(guò)系統(tǒng)合約進(jìn)行管理,節(jié)點(diǎn)管理員通過(guò)發(fā)送交易進(jìn)行共識(shí)節(jié)點(diǎn)的增刪 |
通過(guò)系統(tǒng)合約進(jìn)行管理,節(jié)點(diǎn)管理員通過(guò)發(fā)送交易進(jìn)行共識(shí)節(jié)點(diǎn)的增刪 |
通過(guò)配置文件進(jìn)行管理排序節(jié)點(diǎn)管理,節(jié)點(diǎn)管理員通過(guò)發(fā)送交易激活新的配置文件,通過(guò)CA來(lái)認(rèn)證 |
普通節(jié)點(diǎn) |
通過(guò)白名單和黑名單管理鏈接,通過(guò)CA來(lái)判斷節(jié)點(diǎn)是否為普通節(jié)點(diǎn) |
每個(gè)節(jié)點(diǎn)通過(guò)各自的白名單/黑名單來(lái)管理各自的普通節(jié)點(diǎn),不判斷普通節(jié)點(diǎn)身份 |
通過(guò)配置文件來(lái)管理背書(shū)節(jié)點(diǎn)和提交節(jié)點(diǎn),Channel管理員通過(guò)發(fā)送交易來(lái)激活新的配置文件,通過(guò)CA來(lái)認(rèn)證 |
對(duì)于共識(shí)節(jié)點(diǎn)BCOS/CITA均采用了系統(tǒng)合約的方式進(jìn)行管理,節(jié)點(diǎn)的增刪需要共識(shí)節(jié)點(diǎn)進(jìn)行共識(shí)。而Fabric的節(jié)點(diǎn)增刪,可以由節(jié)點(diǎn)管理員修改配置,無(wú)需共識(shí),但是激活新的配置文件需要發(fā)送交易并進(jìn)行共識(shí)。
我們認(rèn)為通過(guò)白名單/黑名單的方式或者CA的方式管理節(jié)點(diǎn)身份,均能滿(mǎn)足聯(lián)盟鏈的大多數(shù)場(chǎng)景,CA在對(duì)節(jié)點(diǎn)身份的驗(yàn)證方面更加嚴(yán)格。
用戶(hù)權(quán)限管理
對(duì)于聯(lián)盟鏈來(lái)將,聯(lián)盟各個(gè)角色以及聯(lián)盟內(nèi)均需要比較復(fù)雜的權(quán)限管理,這樣不同的角色只能訪(fǎng)問(wèn)屬于自己授權(quán)的資源。
在CITA/BCOS中都通過(guò)復(fù)雜的權(quán)限管理,來(lái)對(duì)用戶(hù)的交易權(quán)限進(jìn)行管理,包括發(fā)送交易,創(chuàng)建合約,合約方法調(diào)用權(quán)限等等。
Fabric通過(guò)配置文件的方式(Policy)的方式進(jìn)行管理用戶(hù)的權(quán)限。
BCOS/CITA權(quán)限管理通過(guò)交易的方式進(jìn)行管理,比Fabric通過(guò)配置文件的方式修改,更加區(qū)塊鏈化,治理操作會(huì)保留痕跡。
經(jīng)濟(jì)模型
CITA支持兩種不同的經(jīng)濟(jì)模型
在公鏈中,礦工打包用戶(hù)的交易往往需要用戶(hù)支付一定的手續(xù)費(fèi);對(duì)于聯(lián)盟鏈來(lái)講,情況有所不同。
|
BCOS |
CITA |
Fabric |
免費(fèi)模式 |
用戶(hù)免費(fèi)發(fā)送交易,但是會(huì)限制用戶(hù)每個(gè)區(qū)塊內(nèi)交易復(fù)雜度,雖然免費(fèi)但是也在一定程度上限制用戶(hù)濫用資源 |
用戶(hù)免費(fèi)發(fā)送交易,但是會(huì)限制用戶(hù)每個(gè)區(qū)塊內(nèi)交易復(fù)雜度,雖然免費(fèi)但是也在一定程度上限制用戶(hù)濫用資源 |
不考慮交易復(fù)雜度和交易數(shù)量,只要有權(quán)限,背書(shū)節(jié)點(diǎn)一定會(huì)執(zhí)行,用戶(hù)可以隨意使用系統(tǒng)資源 |
收費(fèi)模式 |
無(wú) |
用戶(hù)發(fā)送交易需要支付系統(tǒng)原生Token給出塊節(jié)點(diǎn),管理員可以通過(guò)系統(tǒng)合約調(diào)整共識(shí)節(jié)點(diǎn)出塊權(quán)限 |
無(wú) |
BCOS、CITA和Fabric均支持向用戶(hù)提供免費(fèi)服務(wù)的模式,同時(shí)在BCOS/CITA中會(huì)通過(guò)系統(tǒng)合約控制用戶(hù)單個(gè)區(qū)塊內(nèi)對(duì)系統(tǒng)資源的使用情況,防止對(duì)系統(tǒng)濫用。
而CITA又可以支持收費(fèi)模式,節(jié)點(diǎn)對(duì)用戶(hù)交易精確計(jì)費(fèi)并收取Token手續(xù)費(fèi)。而Token即可以是節(jié)點(diǎn)免費(fèi)分配給用戶(hù),也可以需要用戶(hù)有償使用,這樣可以更加精細(xì)地控制用戶(hù)對(duì)系統(tǒng)資源的使用情況。
跨鏈和隱私
跨鏈和隱私方案,距離生產(chǎn)環(huán)境依然有可優(yōu)化空間
BCOS引入了群組的方式,使一個(gè)節(jié)點(diǎn)可以屬于不同群組,而群組的消息、交易、存儲(chǔ)、執(zhí)行等等完全隔離。
Fabric 的群組概念和BCOS類(lèi)似,一個(gè)節(jié)點(diǎn)可以屬于不同群組,不同群組可以使用不同的背書(shū)策略。
在BCOS和Fabric中,群組的數(shù)據(jù)和通信等都是隔離的,并且可以使用不同的共識(shí)策略,所以可以將其看成多鏈。當(dāng)前對(duì)于多鏈最大的問(wèn)題在于鏈間通信,兩者在這方面均沒(méi)有非常成熟方案。
在CITA中,引入了側(cè)鏈技術(shù),側(cè)鏈和主鏈之間可以互相通信,側(cè)鏈技術(shù)距離生產(chǎn)環(huán)境依然有可優(yōu)化的空間。
無(wú)論群組或者側(cè)鏈等技術(shù),本質(zhì)上都是一種多鏈技術(shù),當(dāng)前多鏈技術(shù)只能解決節(jié)點(diǎn)的隱私問(wèn)題,暫時(shí)無(wú)法處理交易和用戶(hù)級(jí)別的隱私。
CITA已經(jīng)開(kāi)源其零知識(shí)證明和SGX的實(shí)現(xiàn)。
對(duì)于同態(tài)加密、零知識(shí)證明,SGX等等,都處于發(fā)展階段,距離生產(chǎn)環(huán)境依然有可優(yōu)化的空間。
密碼學(xué)支持
CITA在密碼學(xué)支持上更全面
|
BCOS |
CITA |
Fabric |
Hash算法 |
Keccak |
Keccak/blake2b |
SHA3 |
簽名算法 |
Secp256k1 |
Secp256k1/ED25519 |
Secp256k1 |
國(guó)密支持 |
支持 |
支持 |
否 |
對(duì)比可以看到BCOS/CITA均支持國(guó)密,對(duì)國(guó)內(nèi)監(jiān)管需求較友好;在密碼學(xué)算法支持上CITA更全面,除了支持常見(jiàn)的Keccak/Secp256k1之外,也支持更安全性能更好的Keccak/Secp256k1。
系統(tǒng)架構(gòu)
CITA采用了微服務(wù)架構(gòu)
BCOS和Fabric均采用了單一系統(tǒng)的架構(gòu),這種架構(gòu)要求節(jié)點(diǎn)必須在單一的物理機(jī)器上。
而CITA采用了微服務(wù)架構(gòu),而且CITA也是全球第一個(gè)使用微服務(wù)架構(gòu)的開(kāi)源區(qū)塊鏈。采用微服務(wù)架構(gòu),可以使節(jié)點(diǎn)不僅僅限制在單個(gè)物理機(jī)器上,這樣對(duì)于企業(yè)用戶(hù)可以用更好的硬件設(shè)備去支持節(jié)點(diǎn),有更好的擴(kuò)展性。由于微服務(wù)間通過(guò)消息訂閱進(jìn)行通信,企業(yè)用戶(hù)可以方便地替換或者增加定制化的服務(wù),方便進(jìn)行功能擴(kuò)展。
開(kāi)源協(xié)議
BCOS的開(kāi)源協(xié)議對(duì)商業(yè)應(yīng)用不夠友好
|
BCOS |
CITA |
Fabric |
開(kāi)源協(xié)議 |
GPL-3.0 |
Apache-2.0 |
Apache-2.0 |
這里簡(jiǎn)單介紹下相關(guān)的開(kāi)源協(xié)議。
GPL協(xié)議的主要內(nèi)容是只要在一個(gè)軟件中使用(”使用”指類(lèi)庫(kù)引用,修改后的代碼或者衍生代碼)GPL 協(xié)議的產(chǎn)品,則該軟件產(chǎn)品必須也采用GPL協(xié)議,既必須也是開(kāi)源和免費(fèi)。這就是所謂的”傳染性”。由于GPL嚴(yán)格要求使用了GPL類(lèi)庫(kù)的軟件產(chǎn)品必須使用GPL協(xié)議,對(duì)于使用GPL協(xié)議的開(kāi)源代碼,商業(yè)軟件或者對(duì)代碼有保密要求的部門(mén)就不適合集成/采用作為類(lèi)庫(kù)和二次開(kāi)發(fā)的基礎(chǔ)。
Apache Licence也是對(duì)商業(yè)應(yīng)用友好的許可。使用者也可以在需要的時(shí)候修改代碼來(lái)滿(mǎn)足需要并作為開(kāi)源或商業(yè)產(chǎn)品發(fā)布/銷(xiāo)售。
由此可以看出,BCOS的開(kāi)源協(xié)議對(duì)商業(yè)應(yīng)用不夠友好。
語(yǔ)言實(shí)現(xiàn)
CITA使用更現(xiàn)代的語(yǔ)言Rust,性能更高同時(shí)安全性更可靠
BCOS:使用C++進(jìn)行開(kāi)發(fā),C++性能高,但是由于其歷史原因,系統(tǒng)容易有內(nèi)存安全的隱患;
Fabirc:Go實(shí)現(xiàn),由于垃圾回收機(jī)制性能比C++弱;
CITA:Rust實(shí)現(xiàn),現(xiàn)在相對(duì)主流的區(qū)塊鏈界的語(yǔ)言,Rust在內(nèi)存安全方面有保證,性能可以和C++媲美。
總結(jié)
經(jīng)過(guò)以上的分析,我們匯總其最主要的優(yōu)缺點(diǎn):
|
BCOS |
CITA |
Fabric |
優(yōu)點(diǎn) |
• 兩種不同的存儲(chǔ)模式 • 智能合約方便易用 |
• 自主研發(fā)高效的共識(shí)算法 • 智能合約方便易用 |
• 支持CouchDB存儲(chǔ) • 共識(shí)協(xié)議更加靈活 |
缺點(diǎn) |
• 開(kāi)源協(xié)議對(duì)商業(yè)應(yīng)用不友好 |
• 數(shù)據(jù)庫(kù)不支持條件查詢(xún) |
• 共識(shí)和交易流程限制其業(yè)務(wù)場(chǎng)景 |
【51CTO原創(chuàng)稿件,合作站點(diǎn)轉(zhuǎn)載請(qǐng)注明原文作者和出處為51CTO.com】