1. 程式人生 > >區塊鏈學這個就夠了-DLT(一)

區塊鏈學這個就夠了-DLT(一)

sys sensu 對賬 支付 app -s 狀態 轉發 其它

三種不同的框架

Hyperledger Fabric、R3 Corda三種框架在可能的應用領域上分別具有完全不同的想法。Fabric和Corda的開發是受具體用例驅動的。其中,Corda的用例來自於金融服務行業,這也是Corda可見的主要應用領域。Fabric設計提供一種模塊化、可擴展的架構,可用於從銀行、醫療保健到供應鏈等各個行業。以太坊表現出完全獨立於任何特定的應用領域。然而與Fabric相比,以太坊並未突出模塊化,而重在為各種交易和應用提供一個通用平臺。表1給出了三種框架的情況匯總。

    表1: 以太坊、Hyperledger Fabric和Corda的對比

特性以太坊Hyperledger Fabric
R3 Corda
平臺描述 通用區塊鏈平臺 模塊化區塊鏈平臺 金融行業專用的分布式賬本平臺
管理方 以太坊開發者 Linux基金會 R3
運行模式 無授權,可公開,也可私有[4] 有授權,私有 有授權,私有
共識 基於Pow的挖礦; 賬本層面 支持多種方法、更寬泛的共識理解;交易層面 對共識的特定理解(即公證節點);交易層面
智能合約 智能合約代碼(例如,Solidity) 智能合約代碼(例如,Go、Java) 智能合約代碼(例如,Kotlin、Java);智能法律合約(即法律行文)
貨幣 ETH ; ERC 沒有;通過區塊鏈代碼 沒有

對等端的參與

在傳統的集中式數據存儲中,只有一個實體(即所有者)可以保留賬本這一底層數據庫的副本。因此,該實體控制了哪些數據可以提供,以及允許其它實體提供什麽數據。DLT的出現,從根本上改變了分布式數據存儲的方式,實現了多個實體擁有底層數據庫副本,自然也支持每個拷貝做出貢獻。參與分布式數據存儲的所有實體,形成一種由所謂“節點”或“對等端”構成的網絡。由於數據是分布式存儲的,因此難以確保所有節點對一些“共同事實”(例如,賬本的正確性)達成一致。因為一個節點所做的更改,必須傳播到網絡中的所有其它的對等節點上。達成共同事實的結果,稱之為節點間的“共識”(consensus),將在下文介紹。

針對是否參與達成共識,存在兩種操作模式,即無授權(permissionless)和有授權(permissioned)。如果參與無需授權,那麽任何人都可以參與網絡。授權模式適用於作為公共區塊鏈的以太坊。另一方面,如果參與需授權,那麽參與者是經過預先選擇的,並且僅限於這些參與者訪問網絡。Fabric和Corda都屬於後者。選擇無授權或有授權的參與模式,將對達成共識具有深遠的影響。

共識

以太坊

使用以太坊,無論參與者是否參與了某個特定的交易(Transaction),所有參與者必須就全部已發生交易的順序達成共識。交易的順序對賬本的一致狀態至關重要。如果無法建立明確的交易順序,那麽可能會出現雙重支付(double-spends)問題,即兩筆並行交易將同一枚貨幣轉賬給了不同的收款人,使其憑空受益。由於網絡所涉及的各方可能是互不信任的,並且是匿名的,因此必須采用共識機制來保護賬本免受雙重支付欺詐,或者心懷鬼胎參與者的影響。在目前的以太坊實現中,這種共識機制的建立是使用基於工作證明(PoW,Proof of Work)方案的挖礦。所有參與者必須認同一個共同賬本,並且可以訪問賬本中所有的記錄條目。其結果是,PoW會對交易的處理性能產生不利的影響。盡管記錄是匿名的,但是存儲在賬本中的數據仍然可供所有參與者訪問。因此對於有更高隱私度需求的應用而言,這種機制存在問題。

不同於以太坊,Fabric和Corda給出了更精細的共識設計,不再僅僅局限於基於PoW或其它變種的挖礦。由於Fabric和Corda運行在許可模式下,因此可為記錄提供更細粒度的訪問控制,從而增強了隱私。此外,由於只有參與交易的各方才必須要達成共識,因此在性能上有所提高。

Fabric

Fabric提供了範圍很廣的共識理解,涵蓋從將交易提交網絡到將交易記錄到賬本的整個交易流程。此外,節點在達成共識的過程中承擔了不同的角色和任務。這完全不同於以太坊,其中參與達成共識的節點具有相同的角色和任務。

Fabric將節點區分為客戶節點(Client)、對等節點(Peer)和訂購節點(Orderer)。客戶節點代表最終用戶,創建並調用交易。他們與對等節點和訂購節點溝通。對等節點維護賬本,並接收訂購節點訂購的更新消息,以向賬本提交新的交易。背書節點(Endorser)是一類特殊的對等節點,任務是通過檢查自身是否滿足一些必要的和充分的條件(例如提供所需的簽名),對交易提供背書。訂購節點在客戶節點和對等節點間提供了通信通道,用於廣播包含交易的消息。特別是對於共識,這些通道確保了所有已連接的對等節點按照完全相同的邏輯順序傳遞完全相同的消息。

但是問題會出現在這一點上。如果其中涉及多個互不信任的訂購節點,在傳遞消息時可能會出現錯誤。因此,必須引入一致性算法,使得在出現故障(例如,消息順序不一致)時仍然可以達成一致,從而使分布式賬本的復制過程支持容錯。Fabric所采用的算法是“可拔插的”,即可以根據特定應用的需求而使用各種算法。例如,為了處理如上所述的隨機或惡意復制錯誤,我們可以使用拜占庭式容錯的一種變體算法(PBFT)。此外,通道劃分了消息流,這意味著客戶節點只能看到它們連接通道中的消息及相關聯的交易,而不知道其它通道的情況。通過這種方式,對交易的訪問將僅限於相關方。其結果是只能在交易層面達成共識,而不能像以太坊那樣在賬本層面達成共識。

上面介紹了節點,現在介紹交易流的上下文。客戶節點向已連接的背書節點發送交易,啟動對賬本的更新。所有背書節點都必須就提出的交易達成一致,因此需要根據更新所建議的賬本達成某種共識。客戶節點依次收集所有背書節點的批準,然後將經批準的交易發送給已連接的訂購節點,由這些訂購節點再次達成共識。隨後,交易將被轉發給持有分類賬的對等節點,以提交交易。

我們在此不再做進一步的詳細介紹。很顯然,Fabric支持對共識做細粒度的控制,並提供對交易的受限訪問,這提高了性能的可擴展性和隱私性。

Corda

類似於Fabric,Corda的共識也是在交易層面達成的,僅涉及交易的各方。交易取決於共識是滿足交易合法性(validity),還是交易唯一性(uniqueness)。交易合法性通過運行與交易相關聯的智能合約代碼(智能合約將在下文給出詳細介紹),檢查需要的所有簽名,並確保所引用的任何交易也是有效的。交易唯一性涉及交易的輸入狀態。具體而言,必須確保有疑問的交易是所有輸入狀態的唯一消費者。換句話說,不存在任何消耗同一狀態的其它交易。這是為了避免產生雙重支付。實現交易唯一性的共識,是在稱為“公證人”(Notary)[9]的參與節點中達成的。其中使用的算法和Fabric一樣,是“可插拔的”。因此,我們同樣可以使用BFT算法。

智能合約

在第一次接觸“智能合約”(smart contract)一詞時,人們難免會產生相當大的誤解,將其理解為某種智能地表達了某人利益的合約。盡管合約的本質仍然存在含糊不清之處,但是在直觀上它似乎應與法律有關。也就是說,我們所關註的合約在本意上並非智能的,至少目前仍尚未由人工智能驅動,也尚未在其中編入具有法律約束力的義務和權利。Clark及其同事在給出“智能合約”這一有用術語時,強調指出了該術語的兩種不同的常用方式。第一種方式是智能合約代碼(smart contract code),另一種方式是智能法律合約(smart legal contracts)。本文著重介紹兩者間的區別。

智能合約代碼就是用某種編程語言編寫的軟件。它作為一個軟件代理,或是代表其中某一方,目的是履行某些義務、行使某些權利,並以自動的方式控制分布式賬本中的資產。因此,智能合約通過代碼執行模擬,或模擬現實世界中合約邏輯,承擔了分布式賬本的任務和責任,盡管其合法性可能尚未明確。

所有的DLT都支持以智能合約代碼的形式履行智能合約。代碼可以使用Go、Java for Fabric 、Solidity for Ethereum,以及Java/Kotlin for Corda 編寫。在Fabirc中使用了術語“鏈碼”(chaincode),以此作為智能合約的同義詞。舉例說明,Corda為確保交易的有效性,會提醒讀者在共識機制中使用智能合同代碼。一方面,Fabric和Ethereum之間存在著顯著的差異。另一方面,這是與Corda使用另一種“智能合約”方式相關。

在Corda中,智能合約不僅可以包含代碼,還允許包含法律行文(Legal Prose)。因此,上述智能法律合約是法律行文,其制定方式可以通過智能合同代碼來表達和實施。其背後的基本原理,是賦予植根於相關法律行為的代碼以合法性。這種結構稱為“Ricardian合約”。這清晰地表明,Corda是設計用於金融服務行業這一受嚴格監管的環境。而Fabric和Ethereum都不具備此功能。

內建代幣

另一個值得註意的區別,是以太坊提供一種稱為“以太”的內置加密貨幣。以太用於向幫助通過挖礦達成共識的節點支付獎勵,並支付交易費用。因此,去中心化應用(DApps)可以基於支持貨幣交易的以太坊構建。此外,通過部署符合預定義標準的智能合約,可以創建為用例定制的數字代幣。使用這種方式,人們可以定義自己的貨幣或資產。

Fabric和Corda不支持通過挖礦達成共識,因此不需要內建的加密貨幣。但是使用Fabric,也可以開發本地貨幣,或是帶有區塊鏈代碼的數字代幣。使用Corda,不建議創建數字貨幣或代幣。

總結:定制平臺對比通用平臺

總結一下,本文分析的DLT橫貫東西。一方面是Fabric和以太坊。它們在不同的方面上具有非常大的靈活性。以太坊是一種強大的智能合約引擎,基本上可作為任何類型應用的通用平臺。但是,以太坊的無授權操作模式及全面透明度,是以犧牲性能可擴展性和隱私性為代價的。Fabric采用有授權的操作模式,即使用BFT算法和細粒度訪問控制解決了性能可擴展性和隱私問題。此外,Fabric的模塊化體系結構使其可以針對眾多應用進行定制。我們可將Fabric比做一個多功能的工具箱。

另一方面是Corda。它專門設計為一種用於金融服務行業的DLT。應註意的是,Corda通過增加法律行文的智能合約,考慮了受高度管制的環境。顯然,與Fabric相比,專註於金融服務交易使Corda得以簡化其架構設計。因此,Corda可以提供更多的開箱即可用體驗。不過,Fabric的模塊化支持定制類似於Corda的功能集。一些工作力圖將Corda納入Hyperledger項目。因此,不能將Corda視為Fabric的競爭對手,而更多的是一種補充。

學術鏈接:

A類:S&P,全稱:IEEE Symposium on Security and Privacy 每年11月截稿,第二年5月在美國開會,算是安全方向最好的會議。由於每年都是在美帝Oakland舉辦,會議也俗稱Oakland. 這個會議接收的paper都是全面型的,好的idea 和 design,又有完整的implementation和好的效果,難度是四大中最難的。SP前兩年的區塊鏈文章還蠻多的,zcoin和zcash都是投於此,但是16年好像就中了一篇blockchain的文章。

A+類:CCS,全稱:Computer and Communications Security 每年5月截稿,同年10月在美國開會。會議接收的paper偏理論和證明,不要求太強的實現,但是idea和design是要極好的。這個會議給了區塊鏈單獨的日程,16年有大概6篇的樣子(包括智能合約)。大家可以多看看這個會。

A類:USENIX,全稱 Security Usenix Security Symposium 每年2月截稿,同年8月在美國開會。接收的paper偏系統類型的,漂亮的實現很受該會的喜歡。這個會收錄區塊鏈文章也比較少,16年也就一篇。

A類:NDSS,全稱:Network and Distributed System Security 每年8月截稿,第二年2月在美國開會,是四大當中相對最容易的,側重新想法與實現。我找了找沒找到任何區塊鏈論文,因為人家是網絡和分布式系統安全嘛。

C類:區塊鏈投的最多的會議:FC Financial Cryptography and Data Security

FC 由國際金融密碼協會 (IFCA)資助,主要接受與金融密碼學相關的文章。雖然被CCF評為C類會議,但是他的質量並不差,他的出發點和區塊鏈的正好一致,所以很多的文章投在這裏。

三大密碼會(美密,歐密,亞密):其中歐密這兩年也接受了幾篇blockchain相關論文。

武大區塊鏈實驗室

區塊鏈技術整理

歐密會議論文

期刊推薦:FGCS

Latest DLT , Financial Institutions & IBM Unveil LedgerConnect Blockchain Project

區塊鏈學這個就夠了-DLT(一)