以太坊、Hyperledger Fabric和Corda,哪个更好?
?
編譯|蓋磊編輯|前哨小兵甲區(qū)塊鏈前哨導(dǎo)語:?我們分析了 Hyperledger Fabric,R3 Corda 和以太坊這三種分布式賬本技術(shù)間存在的最顯著差異,目的是為決策者提供一個(gè)新的 DLT 指南,了解 Hyperledger Fabric、Corda 和以太坊的最適合用例。更多干貨內(nèi)容請關(guān)注微信公眾號“區(qū)塊鏈前哨”,(ID:blockchain-666)
本文中,我們將簡要分析 Hyperledger Fabric,R3 Corda 和以太坊這三種分布式賬本技術(shù)(DLT,distributed ledger technologies)間存在的最顯著差異。本文的目的在于為決策者提供一個(gè)新的 DLT 指南,了解 Hyperledger Fabric、Corda 和以太坊的最適合用例。
三種不同的框架我們從 Hyperledger Fabric、R3 Corda(下文分別簡稱為 Fabric 和 Corda)和以太坊的白皮書中可以看到,三種框架在可能的應(yīng)用領(lǐng)域上分別具有完全不同的想法。Fabric[1] 和 Corda[2] 的開發(fā)是受具體用例驅(qū)動(dòng)的。其中,Corda 的用例來自于金融服務(wù)行業(yè),這也是 Corda 可見的主要應(yīng)用領(lǐng)域。Fabric 設(shè)計(jì)提供一種模塊化、可擴(kuò)展的架構(gòu),可用于從銀行、醫(yī)療保健到供應(yīng)鏈等各個(gè)行業(yè)。以太坊表現(xiàn)出完全獨(dú)立于任何特定的應(yīng)用領(lǐng)域 [3]。然而與 Fabric 相比,以太坊并未突出模塊化,而重在為各種交易和應(yīng)用提供一個(gè)通用平臺。表 1 給出了三種框架的情況匯總。
表 1: 以太坊、Hyperledger Fabric 和 Corda 的對比
對等端的參與在傳統(tǒng)的集中式數(shù)據(jù)存儲中,只有一個(gè)實(shí)體(即所有者)可以保留賬本這一底層數(shù)據(jù)庫的副本。因此,該實(shí)體控制了哪些數(shù)據(jù)可以提供,以及允許其它實(shí)體提供什么數(shù)據(jù)。DLT 的出現(xiàn),從根本上改變了分布式數(shù)據(jù)存儲的方式,實(shí)現(xiàn)了多個(gè)實(shí)體擁有底層數(shù)據(jù)庫副本,自然也支持每個(gè)拷貝做出貢獻(xiàn)。參與分布式數(shù)據(jù)存儲的所有實(shí)體,形成一種由所謂“節(jié)點(diǎn)”或“對等端”構(gòu)成的網(wǎng)絡(luò)。由于數(shù)據(jù)是分布式存儲的,因此難以確保所有節(jié)點(diǎn)對一些“共同事實(shí)”(例如,賬本的正確性)達(dá)成一致。因?yàn)橐粋€(gè)節(jié)點(diǎn)所做的更改,必須傳播到網(wǎng)絡(luò)中的所有其它的對等節(jié)點(diǎn)上。達(dá)成共同事實(shí)的結(jié)果,稱之為節(jié)點(diǎn)間的“共識”(consensus),將在下文介紹。
針對是否參與達(dá)成共識,存在兩種操作模式,即無授權(quán)(permissionless)和有授權(quán)(permissioned)。如果參與無需授權(quán),那么任何人都可以參與網(wǎng)絡(luò)。授權(quán)模式適用于作為公共區(qū)塊鏈的以太坊。另一方面,如果參與需授權(quán),那么參與者是經(jīng)過預(yù)先選擇的,并且僅限于這些參與者訪問網(wǎng)絡(luò)。Fabric 和 Corda 都屬于后者。選擇無授權(quán)或有授權(quán)的參與模式,將對達(dá)成共識具有深遠(yuǎn)的影響。
共識?以太坊使用以太坊,無論參與者是否參與了某個(gè)特定的交易(Transaction),所有參與者必須就全部已發(fā)生交易的順序達(dá)成共識。交易的順序?qū)~本的一致狀態(tài)至關(guān)重要。如果無法建立明確的交易順序,那么可能會(huì)出現(xiàn)雙重支付(double-spends)問題,即兩筆并行交易將同一枚貨幣轉(zhuǎn)賬給了不同的收款人,使其憑空受益。由于網(wǎng)絡(luò)所涉及的各方可能是互不信任的,并且是匿名的,因此必須采用共識機(jī)制來保護(hù)賬本免受雙重支付欺詐,或者心懷鬼胎參與者的影響。在目前的以太坊實(shí)現(xiàn)中,這種共識機(jī)制的建立是使用基于工作證明(PoW,Proof of Work)方案的挖礦。所有參與者必須認(rèn)同一個(gè)共同賬本,并且可以訪問賬本中所有的記錄條目。其結(jié)果是,PoW 會(huì)對交易的處理性能產(chǎn)生不利的影響 [5]。盡管記錄是匿名的,但是存儲在賬本中的數(shù)據(jù)仍然可供所有參與者訪問。因此對于有更高隱私度需求的應(yīng)用而言,這種機(jī)制存在問題。
不同于以太坊,Fabric 和 Corda 給出了更精細(xì)的共識設(shè)計(jì),不再僅僅局限于基于 PoW 或其它衍生物的挖礦。由于 Fabric 和 Corda 運(yùn)行在許可模式下,因此可為記錄提供更細(xì)粒度的訪問控制,從而增強(qiáng)了隱私。此外,由于只有參與交易的各方才必須要達(dá)成共識,因此在性能上有所提高。
?FabricFabric 提供了范圍很廣的共識理解,涵蓋從將交易提交網(wǎng)絡(luò)到將交易記錄到賬本的整個(gè)交易流程 [6]。此外,節(jié)點(diǎn)在達(dá)成共識的過程中承擔(dān)了不同的角色和任務(wù)。這完全不同于以太坊,其中參與達(dá)成共識的節(jié)點(diǎn)具有相同的角色和任務(wù)。
Fabric 將節(jié)點(diǎn)區(qū)分為客戶節(jié)點(diǎn)(Client)、對等節(jié)點(diǎn)(Peer)和訂購節(jié)點(diǎn)(Orderer)[7]。客戶節(jié)點(diǎn)代表最終用戶,創(chuàng)建并調(diào)用交易。他們與對等節(jié)點(diǎn)和訂購節(jié)點(diǎn)溝通。對等節(jié)點(diǎn)維護(hù)賬本,并接收訂購節(jié)點(diǎn)訂購的更新消息,以向賬本提交新的交易。背書節(jié)點(diǎn)(Endorser)是一類特殊的對等節(jié)點(diǎn),任務(wù)是通過檢查自身是否滿足一些必要的和充分的條件(例如提供所需的簽名),對交易提供背書。訂購節(jié)點(diǎn)在客戶節(jié)點(diǎn)和對等節(jié)點(diǎn)間提供了通信通道,用于廣播包含交易的消息。特別是對于共識,這些通道確保了所有已連接的對等節(jié)點(diǎn)按照完全相同的邏輯順序傳遞完全相同的消息。
但是問題會(huì)出現(xiàn)在這一點(diǎn)上。如果其中涉及多個(gè)互不信任的訂購節(jié)點(diǎn),在傳遞消息時(shí)可能會(huì)出現(xiàn)錯(cuò)誤。因此,必須引入一致性算法,使得在出現(xiàn)故障(例如,消息順序不一致)時(shí)仍然可以達(dá)成一致,從而使分布式賬本的復(fù)制過程支持容錯(cuò)。Fabric 所采用的算法是“可插入的”,即可以根據(jù)特定應(yīng)用的需求而使用各種算法。例如,為了處理如上所述的隨機(jī)或惡意復(fù)制錯(cuò)誤,我們可以使用拜占庭式容錯(cuò)(BFT)的一種變體算法。此外,通道劃分了消息流,這意味著客戶節(jié)點(diǎn)只能看到它們連接通道中的消息及相關(guān)聯(lián)的交易,而不知道其它通道的情況。通過這種方式,對交易的訪問將僅限于相關(guān)方。其結(jié)果是只能在交易層面達(dá)成共識,而不能像以太坊那樣在賬本層面達(dá)成共識。
上面介紹了節(jié)點(diǎn),現(xiàn)在介紹交易流的上下文。客戶節(jié)點(diǎn)向已連接的背書節(jié)點(diǎn)發(fā)送交易,啟動(dòng)對賬本的更新。所有背書節(jié)點(diǎn)都必須就提出的交易達(dá)成一致,因此需要根據(jù)更新所建議的賬本達(dá)成某種共識。客戶節(jié)點(diǎn)依次收集所有背書節(jié)點(diǎn)的批準(zhǔn),然后將經(jīng)批準(zhǔn)的交易發(fā)送給已連接的訂購節(jié)點(diǎn),由這些訂購節(jié)點(diǎn)再次達(dá)成共識。隨后,交易將被轉(zhuǎn)發(fā)給持有分類賬的對等節(jié)點(diǎn),以提交交易。
我們在此不再做進(jìn)一步的詳細(xì)介紹。很顯然,Fabric 支持對共識做細(xì)粒度的控制,并提供對交易的受限訪問,這提高了性能的可擴(kuò)展性和隱私性。
?Corda類似于 Fabric,Corda 的共識也是在交易層面達(dá)成的,僅涉及交易的各方。交易取決于共識是滿足交易合法性(validity),還是交易唯一性(uniqueness)[8]。交易合法性通過運(yùn)行與交易相關(guān)聯(lián)的智能合約代碼(智能合約將在下文給出詳細(xì)介紹),檢查需要的所有簽名,并確保所引用的任何交易也是有效的。交易唯一性涉及交易的輸入狀態(tài)。具體而言,必須確保有疑問的交易是所有輸入狀態(tài)的唯一消費(fèi)者。換句話說,不存在任何消耗同一狀態(tài)的其它交易。這是為了避免產(chǎn)生雙重支付。實(shí)現(xiàn)交易唯一性的共識,是在稱為“公證人”(Notary)[9] 的參與節(jié)點(diǎn)中達(dá)成的。其中使用的算法和 Fabric 一樣,是“可插拔的”。因此,我們同樣可以使用 BFT 算法。
智能合約在第一次接觸“智能合約”(smart contract)一詞時(shí),人們難免會(huì)產(chǎn)生相當(dāng)大的誤解,將其理解為某種智能地表達(dá)了某人利益的合約。盡管合約的本質(zhì)仍然存在含糊不清之處,但是在直觀上它似乎應(yīng)與法律有關(guān)。也就是說,我們所關(guān)注的合約在本意上并非智能的,至少目前仍尚未由人工智能驅(qū)動(dòng),也尚未在其中編入具有法律約束力的義務(wù)和權(quán)利。Clark 及其同事 [10] 在給出“智能合約”這一有用術(shù)語時(shí),強(qiáng)調(diào)指出了該術(shù)語的兩種不同的常用方式。第一種方式是智能合約代碼(smart contract code),另一種方式是智能法律合約(smart legal contracts)。本文著重介紹兩者間的區(qū)別。
智能合約代碼就是用某種編程語言編寫的軟件。它作為一個(gè)軟件代理,或是代表其中某一方,目的是履行某些義務(wù)、行使某些權(quán)利,并以自動(dòng)的方式控制分布式賬本中的資產(chǎn)。因此,智能合約通過代碼執(zhí)行模擬,或模擬現(xiàn)實(shí)世界中合約邏輯,承擔(dān)了分布式賬本的任務(wù)和責(zé)任,盡管其合法性可能尚未明確。
所有的 DLT 都支持以智能合約代碼的形式履行智能合約。代碼可以使用 Go、Java for Fabric [11]、Solidity[12] for Ethereum,以及 Java/Kotlin for Corda [13] 編寫。在 Fabirc 中使用了術(shù)語“鏈碼”(chaincode),以此作為智能合約的同義詞。舉例說明,Corda 為確保交易的有效性,會(huì)提醒讀者在共識機(jī)制中使用智能合同代碼。一方面,Fabric 和 Ethereum 之間存在著顯著的差異。另一方面,這是與 Corda 使用另一種“智能合約”方式相關(guān)。
在 Corda 中,智能合約不僅可以包含代碼,還允許包含法律行文(Legal Prose)。因此,上述智能法律合約是法律行文,其制定方式可以通過智能合同代碼來表達(dá)和實(shí)施。其背后的基本原理,是賦予植根于相關(guān)法律行為的代碼以合法性。這種結(jié)構(gòu)稱為“Ricardian 合約”[14]。這清晰地表明,Corda 是設(shè)計(jì)用于金融服務(wù)行業(yè)這一受嚴(yán)格監(jiān)管的環(huán)境。而 Fabric 和 Ethereum 都不具備此功能。
內(nèi)建代幣另一個(gè)值得注意的區(qū)別,是以太坊提供一種稱為“以太”的內(nèi)置加密貨幣。以太用于向幫助通過挖礦達(dá)成共識的節(jié)點(diǎn)支付獎(jiǎng)勵(lì),并支付交易費(fèi)用。因此,去中心化應(yīng)用(DApps)可以基于支持貨幣交易的以太坊構(gòu)建。此外,通過部署符合預(yù)定義標(biāo)準(zhǔn)的智能合約,可以創(chuàng)建為用例定制的數(shù)字代幣 [15]。使用這種方式,人們可以定義自己的貨幣或資產(chǎn)。
Fabric 和 Corda 不支持通過挖礦達(dá)成共識,因此不需要內(nèi)建的加密貨幣。但是使用 Fabric,也可以開發(fā)本地貨幣,或是帶有區(qū)塊鏈代碼的數(shù)字代幣 [16]。使用 Corda,不建議創(chuàng)建數(shù)字貨幣或代幣 [17]。
總結(jié):定制平臺對比通用平臺總結(jié)一下,本文中分析的 DLT 橫貫東西。一方面是 Fabric 和以太坊。它們在不同的方面上具有非常大的靈活性。以太坊是一種強(qiáng)大的智能合約引擎,基本上可作為任何類型應(yīng)用的通用平臺。但是,以太坊的無授權(quán)操作模式及全面透明度,是以犧牲性能可擴(kuò)展性和隱私性為代價(jià)的。Fabric 采用有授權(quán)的操作模式,即使用 BFT 算法和細(xì)粒度訪問控制解決了性能可擴(kuò)展性和隱私問題。此外,Fabric 的模塊化體系結(jié)構(gòu)使其可以針對眾多應(yīng)用進(jìn)行定制。我們可將 Fabric 比做一個(gè)多功能的工具箱。
另一方面是 Corda。它專門設(shè)計(jì)為一種用于金融服務(wù)行業(yè)的 DLT。應(yīng)注意的是,Corda 通過增加法律行文的智能合同,考慮了受高度管制的環(huán)境。
顯然,與 Fabric 相比,專注于金融服務(wù)交易使 Corda 得以簡化其架構(gòu)設(shè)計(jì)。因此,Corda 可以提供更多的開箱即可用體驗(yàn)。不過,Fabric 的模塊化支持定制類似于 Corda 的功能集。一些工作力圖將 Corda 納入 Hyperledger 項(xiàng)目。因此,不能將 Corda 視為 Fabric 的競爭對手,而更多的是一種補(bǔ)充。
查看英文原文:https://medium.com/@philippsandner/comparison-of-ethereum-hyperledger-fabric-and-corda-21c1bb9442f6
參考文獻(xiàn):
[1] https://docs.google.com/document/d/1Z4M_qwILLRehPbVRUsJ3OF8Iir-gqS-ZYe7W-LE9gnE/pub
[2] https://docs.corda.net/_static/corda-introductory-whitepaper.pdf
[3] https://github.com/ethereum/wiki/wiki/White-Paper
[4] e.g. https://github.com/jpmorganchase/quorum
[5] Vukoli? M. (2016). The Quest for Scalable Blockchain Fabric: Proof-of-Work vs. BFT Replication, in: Camenisch J., Kesdo?an D. (eds.) Open Problems in Network Security, iNetSec 2015, Lecture Notes in Computer Science, Vol. 9591, Springer.
[6] https://hyperledger-fabric.readthedocs.io/en/latest/fabric_model.html#consensus
[7] https://github.com/hyperledger/fabric/blob/master/proposals/r1/Next-Consensus-Architecture-Proposal.md
[8] https://docs.corda.net/key-concepts-consensus.html
[9] https://docs.corda.net/key-concepts-notaries.html
[10] http://arxiv.org/abs/1608.00771
[11] http://hyperledger-fabric.readthedocs.io/en/latest/chaincode.html
[12] http://solidity.readthedocs.io/en/latest/
[13] https://docs.corda.net/tutorial-contract.html
[14] http://iang.org/papers/ricardian_contract.html
[15] https://www.ethereum.org/token
[16] https://hyperledger-fabric.readthedocs.io/en/latest/Fabric-FAQ.html#chaincode-smart-contracts-and-digital-assets
[17] https://discourse.corda.net/t/mobile-consumer-payment-experiences-with-corda-on-ledger-cash/966?source_topic_id=962
轉(zhuǎn)載于:https://www.cnblogs.com/bigben0123/p/9070723.html
總結(jié)
以上是生活随笔為你收集整理的以太坊、Hyperledger Fabric和Corda,哪个更好?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySQL服务安装和可视化工具安装
- 下一篇: 使用mybatis向oracle数据库插