比特幣、以太坊、Fabric…你知道它們的優缺點嗎?

鏈客,專爲開發者而生,有問必答!算法

此文章來自區塊鏈技術社區,未經容許拒絕轉載。
圖片描述數據庫

時常聽人們談起區塊鏈,從2009年比特幣誕生至今,各式各樣的區塊鏈系統或基於區塊鏈的應用不斷被開發出來,並被應用到大量的場景中,而區塊鏈技術自己也在不停地變化和改進。編程

區塊鏈又被稱爲分佈式帳本,與之對應的則是中心化帳本,好比銀行。與中心化帳本不一樣的是,分佈式帳本依靠的是將帳本數據冗餘存儲在全部參與節點中來保證帳本的安全性。簡單地說,區塊鏈會用到三種底層技術:點對點網絡、密碼學和分佈式一致性算法。而一般,區塊鏈系統還會「免費附贈」一種被稱爲智能合約的功能。智能合約雖然不是區塊鏈系統的必要組成部分,但因爲區塊鏈天生所具有的去中心化特色,使它能夠很好地爲智能合約提供可信的計算環境。數組

爲了適應不一樣場景的需求,區塊鏈系統在實際應用的過程當中每每會須要進行各類改造,以知足特定業務的要求,好比身份認證、共識機制、密鑰管理、吞吐量、響應時間、隱私保護、監管要求等。而實際應用區塊鏈系統的公司每每沒有進行這種改造的能力,因而市場上慢慢出現了一些用於定製專用區塊鏈系統的框架,採用這些框架就能夠很方便地定製出適用於企業自身業務需求的區塊鏈系統。本文將對目前市場上幾個典型的區塊鏈框架進行橫向對比。安全

比特幣服務器

比特幣(Bitcoin)源自中本聰(Satoshi Nakamoto)在2008年發表的一篇論文《比特幣:一種點對點的電子現金系統》(Bitcoin:A Peer-to-PeerElectronic Cash System),文中描述了一種被他稱爲「比特幣」的電子貨幣及其算法。在以後的幾年裏,比特幣不斷成長和成熟,而它的底層技術也逐漸被人們認識並抽象出來,這就是區塊鏈技術。比特幣做爲區塊鏈的鼻祖,在區塊鏈的你們族中具備舉足輕重的地位,基於比特幣技術開發出的山寨幣(Altcoins)的數量有如天上繁星,難以計數。網絡

中本聰設計比特幣的目的,就是但願可以實現一種徹底基於點對點網絡的電子現金系統,使得在線支付可以直接由一方發起並支付給另一方,中間不須要經過任何的中介機構。總結來講,他但願比特幣可以實現如下這些設計目標:數據結構

不須要中央機構就能夠發行貨幣架構

不須要中介機構就能夠支付併發

保持使用者匿名

交易沒法被撤銷

從電子現金系統的角度來看,以上這些目標在比特幣中基本都獲得了實現,可是依然有一些技術問題有待解決,好比延展性攻擊、區塊容量限制、區塊分叉、擴展性等。

在應用場景方面,目前大量的數字貨幣項目都是基於比特幣架構來設計的,此外還有一些比較實際的應用案例,好比彩色幣、tØ等。

彩色幣(Coloredcoin),經過仔細跟蹤一些特定比特幣的前因後果,能夠將它們與其餘的比特幣區分開來,這些特定的比特幣就叫做彩色幣。它們具備一些特殊的屬性,從而具備與比特幣面值無關的價值,利用彩色幣的這種特性,開發者能夠在比特幣網絡上建立其餘的數字資產。彩色幣自己就是比特幣,存儲和轉移不須要第三方,能夠利用已經存在的比特幣基礎網絡。

tØ是比特幣區塊鏈在金融領域的應用,是美國在線零售商Overstock推出的基於區塊鏈的私有和公有股權交易平臺。

以太坊

以太坊(Ethereum)的目標是提供一個帶有圖靈完備語言的區塊鏈,用這種語言能夠建立合約來編寫任意狀態轉換功能。用戶只要簡單地用幾行代碼來實現邏輯,就可以建立一個基於區塊鏈的應用程序,並應用於貨幣之外的場景。以太坊的設計思想是不直接「支持」任何應用,但圖靈完備的編程語言意味着理論上任意合約邏輯和任何類型的應用均可以被建立出來。總結來講,以太坊在比特幣的功能以外,還有如下幾個設計目標:

圖靈完備的合約語言

內置的持久化狀態存儲

目前基於以太坊的合約項目已達到數百個,比較有名的有Augur、TheDAO、Digix、FirstBlood等。

Augur是一個去中心化的預測市場平臺,基於以太坊區塊鏈技術。用戶能夠用數字貨幣進行預測和下注,依靠羣衆的智慧來預判事件的發展結果,能夠有效地消除對手方風險和服務器的中心化風險。

限於篇幅,基於以太坊智能合約平臺的項目就很少介紹了。基於以太坊的代碼進行改造的區塊鏈項目也有很多,但幾乎都是閉源項目,只能依靠一些公開的特性來推斷,因此就不在本文展開討論了。

Fabric

Fabric是由IBM和DAH主導開發的一個區塊鏈框架,是超級賬本的項目成員之一。它的功能與以太坊相似,也是一個分佈式的智能合約平臺。但與以太坊和比特幣不一樣的是,它從一開始就是一個框架,而不是一個公有鏈,也沒有內置的代幣(Token)。

超級帳本(Hyperledger)是Linux基金會於2015年發起的推動區塊鏈技術和標準的開源項目,加入成員包括:荷蘭銀行(ABN AMRO)、埃森哲(Accenture)等十幾個不一樣利益體,目標是讓成員共同合做,共建開放平臺,知足來自多個不一樣行業各類用戶案例,並簡化業務流程。

做爲一個區塊鏈框架,Fabric採用了鬆耦合的設計,將共識機制、身份驗證等組件模塊化,使之在應用過程當中能夠方便地根據應用場景來選擇相應的模塊。除此以外,Fabric還採用了容器技術,將智能合約代碼(Chaincode)放在Docker中運行,從而使智能合約能夠用幾乎任意的高級語言來編寫。

如下是Fabric的一些設計目標:

模塊化設計,組件可替換

運行於Docker的智能合約

目前已經有很多采用Fabric架構進行開發的概念驗證(POC)項目在實施過程當中,其中不乏一些金融機構作出的嘗試,不過因爲項目剛剛起步,尚未比較成熟的落地應用。

Onchain DNA

Onchain DNA(Onchain Distributed Networks Architecture),是由總部位於上海的區塊鏈創業公司「分佈科技」開發的區塊鏈架構,能夠同時支持公有鏈、聯盟鏈、私有鏈等不一樣應用類型和場景,並快速與業務系統集成。分佈科技一樣也是超級帳本的成員之一。

與以太坊、Fabric不一樣的是,Onchain DNA在系統底層實現了對多種數字資產的支持,用戶能夠直接在鏈上建立本身的資產類型,並用智能合約來控制它的發行和交易邏輯。對於絕大部分的區塊鏈應用場景,數字資產是必不可少的,而爲每一種數字資產都開發一套基於智能合約的業務流程很是浪費且低效。所以,由區塊鏈底層提供直接的數字資產功能十分必要。而對於那些徹底不須要數字資產的應用場景,一樣能夠基於Onchain DNA提供的智能合約功能來編寫任意的自定義邏輯來實現。

Onchain DNA的設計目標主要有如下幾點:

多種數字資產的底層支持

圖靈完備的智能合約和持久化狀態

跨鏈互操做性

交易的最終性

目前已有很多金融機構採用Onchain DNA架構來進行區塊鏈概念驗證產品的開發,如銀行、券商、支付、登記結算機構等。除此以外,還有一些已經落地的區塊鏈項目,如小蟻、法鏈等。

小蟻(Antshares)是一個定位於資產數字化的公有鏈,將實體世界的資產和權益進行數字化,經過點對點網絡進行登記發行、轉讓交易、清算交割等金融業務的去中心化網絡協議。它採用社區化開發的模式,在架構上與Onchain DNA保持一致,從而能夠與任何基於Onchain DNA的區塊鏈系統發生跨鏈互操做。

法鏈是全球第一個大規模商用的法律存證區塊鏈,一個底層基於Onchain DNA區塊鏈技術,並由多個機構參與創建和運營的證據記錄和保存系統。該系統沒有中心控制點,且數據一旦錄入,單個機構或節點沒法篡改,從而知足司法存證的要求。

Corda

Corda是由一家總部位於紐約的區塊鏈創業公司R3CEV開發的,由其發起的R3區塊鏈聯盟,至今已吸引了數十家巨頭銀行的參與,其中包括富國銀行、美國銀行、紐約梅隆銀行、花旗銀行、德國商業銀行、德意志銀行、匯豐銀行、三菱UFJ金融集團、摩根士丹利、澳大利亞國民銀行、加拿大皇家銀行、瑞典北歐斯安銀行(SEB)、法國興業銀行等。從R3成員的組成上也能夠看出,Corda是一款專門用於銀行與銀行間業務的技術架構。儘管R3聲稱Corda不是區塊鏈,但它具有區塊鏈的一些重要特性。

Corda由Java和Kotlin開發,並在其各項功能中充分依賴於Java,好比智能合約、數據訪問接口等。Corda的設計目標主要是:

沒有全局帳本

由公證人(Notaries)來解決交易的多重支付問題

只有交易的參與者和公證人才能看到交易

爲此,Corda的全部交易都不會向全網進行廣播,並且全部的節點都是直接通訊,沒有P2P網絡。這一點致使了其網絡規模會被限制在一個較小的規模內,沒法造成大規模的聯盟鏈,適用的業務場景比較狹窄。

接下來,咱們將針對前文中所提到的這些區塊鏈框架進行一系列的技術對比,並從多個維度展開討論它們的區別與類似之處。

數字資產

區塊鏈的內置代幣一般是一種經濟激勵模型和防止垃圾交易的手段。比特幣天生就有且只有一種內置代幣,因此在比特幣系統中全部的「交易」本質上都是轉帳行爲,除非經過外部的協議層來給比特幣增長額外的數字資產。

以太坊和Onchain DNA具備內置代幣,它們的做用除了以上提到的經濟激勵和防止垃圾交易以外,還爲系統內置功能提供了一個收費的渠道。好比以太坊的智能合約運行須要消耗GAS,而Onchain DNA的數字資產建立也須要消耗必定的代幣(可選)。

以太坊和Fabric沒有內置的多種數字資產支持,而是經過智能合約來實現相應的功能。這種方式的好處在於,系統設計能夠作到很是簡潔,並且資產的行爲能夠任意指定,自由度極高。然而這樣的設計也會帶來一系列的負面影響,好比全部的資產建立者不得不本身編寫重複的業務邏輯,而用戶也沒有辦法經過統一的方式去操做本身的資產。

相比之下,Onchain DNA和Corda採用了在底層支持多種數字資產的方式,讓資產建立者能夠方便地建立本身的資產類型,而用戶也能夠在同一個客戶端中管理全部的資產。對於邏輯更加複雜一點的業務場景來講,他們一樣能夠利用智能合約來強化資產的功能,或者建立一種與資產無關的業務邏輯。

帳戶系統

UTXO(Unspent Transaction Output)是這樣一種機制:每一枚數字貨幣都會被登記在一個帳戶的全部權之下,一枚數字貨幣有兩種狀態,即要麼尚未被花費,要麼已經被花費。當須要使用一枚數字貨幣的時候,就將它的狀態標記爲已經花費,並創造一枚新的與之等額的數字貨幣,將它的全部權登記到新的帳戶之下。在這個過程當中,被標記爲已花費的數字貨幣就被稱爲交易的輸入,而創造出來的新的數字貨幣被稱爲交易的輸出,在一筆交易中,能夠包含多個輸入和多個輸出,可是輸入之和與輸出之和必須相等。計算一個帳戶的餘額時,只要將全部登記在該帳戶下的數字貨幣的面額相加便可。

比特幣和Corda就採用了UTXO這樣一種帳戶機制,而以太坊則採用了更加直觀的餘額機制:每一個帳戶都有一個狀態,狀態中直接記錄了帳戶當前的餘額,轉帳的邏輯就是從一個帳戶中減去一部分金額,並在另外一個帳戶中加上相應的金額,減去的部分和加上的部分必須相等。Onchain DNA在帳戶機制上同時兼容這兩種模式。

那麼UTXO模式和餘額模式,究竟有什麼區別呢?UTXO最大的好處就是,基於UTXO的交易能夠並行驗證且任意排序,由於全部的UTXO之間都是沒有關聯的,這對區塊鏈將來的擴展性有很大的幫助,而基於餘額的設計就沒有這個優點了。反過來,餘額設計的優勢是設計思想很是簡潔和直觀,便於程序實現,特別是在智能合約中,要處理UTXO的狀態是很是困難的。這也是爲何以智能合約爲主要功能的以太坊選擇餘額設計的緣由,而比特幣、OnchainDNA、Corda這些以數字資產爲核心的架構則更傾向於UTXO設計。

關於身份認證,比特幣和以太坊基本沒有身份認證的設計,緣由很簡單,由於這二者的設計思想都是強調隱私和匿名,反對監管和中心化,而身份認證就勢必要引入一些中心或者弱化的中心機構。

Fabric、Onchain DNA和Corda不約而同地選擇了採用數字證書來對用戶身份進行認證,緣由在於這三者都有應用於現有金融系統的設計目標,而金融系統必然要考慮合規化並接受監管,此外現有的金融系統已經大範圍地採用數字證書方案,這樣即可以和區塊鏈系統快速集成。

共識機制

共識機制是分佈式系統的核心算法,由於分佈式系統的數據分散在各個參與節點中,這些分散的數據必須經過一種算法來保持一致性,不然系統將沒法正常工做。與傳統的分佈式系統不一樣,區塊鏈是一個去中心化的系統,而且可能會承載大量的金融資產,因此它可能會面臨大量的拜占庭故障而非通常性故障,而中心化的分佈式系統則不多遇到拜占庭故障。所以,區塊鏈的共識機制與傳統的分佈式系統存在較大的差別。

比特幣和以太坊採用了工做量證實(Proof-of-Work)機制來保證帳本數據的一致性。工做量證實同時也是一種代幣分發機制,它經過經濟激勵的方式來鼓勵節點參與區塊的構造過程,節點在構造區塊的時候須要窮舉一個隨機數以使得區塊符合規定的難度要求,一旦區塊鏈出現分叉,誠實的節點將選擇工做量較大的鏈條,而拋棄工做量較小的。因爲假設全部節點都是逐利的,而選擇工做量較小的鏈條就會使本身得到的激勵無效,因此最終全部的節點都會是誠實的,從而使每一個節點的區塊鏈數據都保持一致。

爲了維護這樣一個工做量證實機制的區塊鏈,須要全網具有較大規模的算力支撐來保證網絡的安全性,不然帳本數據就有可能被篡改。此外,即便維持較大的算力來保護網絡,工做量證實也沒法從根本上保證交易的最終性,好比比特幣就常常產生孤立區塊(Orphaned Block),而包含在孤立區塊中的交易就有可能被撤銷。所以比特幣一般要求用戶等待6個區塊的確認,即1小時左右的時間,才能在一個可接受的機率上認爲交易已經最終完成,而這個機率也並不是是最終性的——你永遠也不知道暗中是否有一個遠超過全網的龐大算力正在試圖撤銷之前的交易。而爲了維護龐大算力而支出的電力成本也是至關可觀,所以,以太坊已經在設計從工做量證實機制切換到其餘共識機制上的方案。

Fabric和Onchain DNA都設計了基於拜占庭容錯(Byzantine Fault Tolerance)模型的共識機制。節點被分爲普通節點和記帳節點(Validating Peer),只有記帳節點纔會參與到區塊的構造過程,這種角色的分離使得算法的設計者有機會將運行共識算法的節點數量限定在一個可控的規模內。

拜占庭容錯模型對網絡中的節點作出了假設和要求:若是共識中有f個節點會出現拜占庭故障,那麼至少須要3f+1個節點參與共識才能避免網絡出現分叉。在這個模型下,每一個區塊的構造過程都須要至少2f+1個節點的參與纔可以完成,而不像工做量證實機制下每一個節點都獨立構造區塊。一旦區塊被構造出來,它就沒法被撤銷,由於2f+1個誠實的記帳節點不會在同一高度對兩個不一樣的區塊進行簽名認證。

相比較而言,工做量證實機制提供了極高的靈活性和可用性,由於每一個節點都獨立構造區塊而幾乎不須要其餘節點的參與,節點能夠隨時加入或者退出網絡,即便全網只剩下一個節點,網絡仍是能夠繼續工做,可是相應的它也失去了交易的最終性;而拜占庭容錯的機制則與之相反,犧牲了必定的靈活性和可用性,記帳節點必須在線提供服務而不能退出網絡,一旦出現1/3的記帳節點停機,那麼網絡將變得不可用,但它保證了交易的最終性。

智能合約

智能合約是1994年由密碼學家尼克薩博(Nick Szabo)首次提出的理念,幾乎與互聯網同齡。智能合約是指可以自動執行合約條款的計算機程序,在比特幣出現之前,由於不存在安全可靠的執行環境,智能合約一直不可以應用到現實中。區塊鏈因爲其去中心化、公開透明等特性,天生就能夠爲智能合約提供可信的執行環境。因此,新型的區塊鏈框架幾乎都會內置智能合約的功能。

比特幣內置了一套基於棧的腳本執行引擎,能夠運行一種獨有的腳本代碼,用於對交易進行簡單的有效性驗證,好比簽名驗證和多重簽名驗證等。比特幣這套腳本語言被有意設計成非圖靈完備的,足夠簡單卻也足以應對貨幣轉帳的各類需求。

以太坊是首個以圖靈完備智能合約爲主要功能的區塊鏈,用戶能夠在以太坊的平臺上建立本身的合約,而合約的內容能夠包含貨幣轉帳在內的任意邏輯。合約使用一種名爲Solidity的語言來編寫,它是以太坊團隊開發的專門用於編寫智能合約的一種高級語言,語法相似JavaScript,最終被編譯成字節碼並運行在EVM(Ethereum Virtual Machine)之中。EVM提供了堆棧、內存、存儲器等虛擬硬件,以及一套專用的指令集,全部的代碼都在沙盒中運行。它提供了合約間相互調用的能力,甚至能夠在運行時動態加載其它合約的代碼來執行。這種能力使得以太坊的合約具備很是高的靈活性,但也可能會使合約的功能具備不肯定性。

與以太坊本身動手開發語言、虛擬機的思路不一樣,Fabric選擇了使用現有的容器技術來支持智能合約功能。Fabric的智能合約理論上能夠用任何語言來編寫,這一點對開發者至關友好,他們將無需學習新的語言,而且能夠複用現有的業務代碼和豐富的開發庫,並使用本身熟悉的開發工具。相對的,採用Docker的智能合約架構也有大量的問題:首先,它很難對智能合約的執行流程進行控制,從而沒法對其功能進行限制;其次,它沒法對合約運行所消耗的計算資源進行精確的評估;此外,運行Docker相對而言是極其耗費資源的操做,這就使得難以在移動設備上運行合約;最後,不一樣節點的硬件配置、合約引用的開發庫等,都有可能會使合約的行爲具備很強的不肯定性。

Onchain DNA採用了AVM(Antshares Virtual Machine)做爲其智能合約功能的底層支持。AVM是一個微核心的、平臺無關的智能合約執行環境,它提供了一套包含堆棧操做、流程控制、邏輯運算、算數運算、密碼學運算、字符串操做、數組操做的指令集,在硬件方面,它只提供了兩個計算堆棧。不過,因爲它容許區塊鏈的實現者建立本身的虛擬硬件,並以接口的形式開放給智能合約來使用,使得合約能夠在運行時取得平臺相關的數據、持久化存儲以及訪問互聯網等。雖然這也有可能會使合約的行爲具備不肯定性,但區塊鏈的實現者能夠經過合理編寫虛擬硬件來消除這種不肯定性。不過,因爲目前尚無與AVM配套的編譯器和開發環境,這使得基於AVM進行智能合約開發變得至關困難,開發者不得不使用一種相似彙編的語法來進行合約編寫,須要較高的技術能力。

Corda的智能合約功能與其自身同樣,都是基於JVM(Java Virtual Machine)的。所以,你可使用任何與JVM兼容的語言來進行開發,好比Java、Kotlin等。不過,它對JVM進行了必定的改造,使得在其上運行的合約腳本具有肯定性。開發的過程大體是這樣的:使用Java建立一個實現Contract接口的類(Class),並提供一個名爲verify的函數(Function)用於對交易進行驗證,該函數接受當前的交易做爲參數,若是交易驗證失敗,則拋出異常(Exception),沒有異常就表示驗證經過。Corda使用JPA(Java Persistence Architecture)來提供持久化功能,支持SQL語句和經常使用的數據庫,不過須要安裝相應的插件,而且因爲數據僅存放在合約執行者的節點,所以沒法進行全局的持久化存儲。

擴展性

區塊鏈的數據結構一般是隻能追加記錄,而不能修改或刪除記錄,它真實地記錄下完整的歷史數據,使得新加入的節點有能力對全網的完整交易歷史進行驗證,而無需信任其它節點。這種特性帶來了去中心化的便利性,但也影響了區塊鏈系統的擴展性,由於區塊會無休止地增加,直到塞滿整個硬盤。因此有必要提供一種空間回收的機制來應對不斷增加的數據。

比特幣提出了使用默克爾樹(Merkle tree)來存放交易散列的方式,當須要回收硬盤空間時,只需將老舊的交易從默克爾樹中剔除便可。一個不含交易信息的區塊頭大小僅有80字節。按照比特幣區塊生成的速率爲每10分鐘一個,那麼每年產生的數據約爲4.2MB,即便將所有的區塊頭存儲於內存之中都不是問題。

以太坊、Fabric和Onchain DNA在比特幣區塊壓縮的基礎上,又採用了狀態快照的方式來節約硬盤空間。具體來講,就是在區塊頭的結構中不但記錄了當前區塊全部交易的根散列,還記錄了當前區塊及過去全部區塊中的狀態根散列。這些狀態包括全部的UTXO、帳戶餘額、合約存儲等,因此節點只須要保留最新的區塊和完整的狀態信息便可。

擴展性的另外一個重要指標是交易的吞吐量。決定吞吐量的因素有不少種,如網絡結構、加密算法、共識機制等,但最重要的仍是交易是否能夠被並行驗證。若是交易能夠被並行驗證,那麼將來就能夠經過簡單地增長CPU數量來提升吞吐量。

基於UTXO系統的比特幣能夠很容易地對交易進行並行驗證,由於UTXO之間是沒有關聯的,對任何一個UTXO的狀態改變均可以獨立進行且與順序無關;而基於餘額的帳戶系統則不那麼容易實現並行,由於可能會同時發生多筆交易對同一個帳戶進行資產操做,須要進行一些額外的步驟來處理。舉個例子,假設帳戶中的餘額爲10元,有兩筆針對該帳戶的交易同時發生,第一筆交易在帳戶中+5元,而第二筆交易在帳戶中-11元。那麼若是先執行第一筆交易,則兩筆都能成功,最終餘額爲4元;若是先執行第二筆交易,那麼它會因餘額不足而失敗,只有第一筆交易會成功,最終餘額爲15元。

而對交易的並行驗證起到決定性做用的,是智能合約是否具有狀態持久化的能力。若是一組合約都是無狀態的,那麼它們就能夠按任意的順序被執行,不會產生任何反作用;相反,若是合約能夠對一組狀態產生影響,那麼按不一樣的順序來執行合約產生的結果也會不一樣。舉個例子,一個計算存款利息的合約,它具備兩個子功能:存款和利息結算。假設帳戶中有100元,利率爲10%,如今同時發生了兩筆交易,第一筆交易的內容是存入100元,第二筆交易的內容是結算利息。假如第一筆交易先執行,那麼最終帳戶的餘額是:100+100)110%=220元;若是第二筆交易先執行,那麼帳戶餘額將是:100110%+100=210元。因而可知,具有狀態持久化能力的智能合約是順序相關的,所以難以併發驗證,特別是若是合約之間還能夠相互調用的話,狀況將會更加複雜。

目前Fabric沒有提出什麼好的辦法來解決這個問題;而Corda則沒有這個問題,由於它的交易自己就不會向全網進行廣播,因此只要交易參與者和公證人能夠驗證便可。以太坊和Onchain DNA的方法都是分區,即將各個合約分到不一樣的邏輯區中,每一個區中的合約都順序執行,而不一樣的區之間並行執行。以太坊將合約地址的首個字節做爲分區依據,由此產生了256個分區,每一個合約都在本身的分區中運行,且只能調用與本身相同分區的合約。但這種作法實際上並不能有效地解決問題,由於總有一些通用的底層合約由於被普遍使用,而把大多數的調用者合約彙集在同一個分區中。

Onchain DNA將合約分爲功能合約(Function code)和應用合約(Applicationcode)。其中功能合約專門用於提供可複用的功能函數,被其它合約調用,且必須被聲明爲無狀態,這一點消除了絕大部分的合約彙集現象;而只有應用合約能夠保存本身的狀態,因此在執行應用合約時,對其採用動態分區方案:在合約被執行以前,會先計算出它們的調用樹,並將調用樹有交集的合約放在同一個分區中執行。

5大項目獨有特性

擴展性

幽靈協議是以太坊對現有POW算法的改進,它提出的動機是當前快速確認的區塊鏈由於區塊的高做廢率而受到的低安全性困擾。由於區塊須要花必定時間擴散至全網,若是礦工A挖出了一個區塊而後礦工B碰巧在A的區塊傳播至B以前挖出了另一個區塊,礦工B的區塊就會做廢而且沒有對網絡安全做出貢獻。若是A是一個擁有全網30%算力的礦池而B擁有10%的算力,A將面臨70%的時間都在產生做廢區塊的風險而B在90%的時間裏都在產生做廢區塊。經過在計算哪條鏈「最長」的時候把廢區塊也包含進來,幽靈協議解決了下降網絡安全性的第一個問題;這就是說,不只一個區塊的父區塊和更早的祖先塊,祖先塊的做廢的後代區塊(以太坊術語中稱之爲「叔區塊」)也被加進來以計算哪個區塊擁有最大的工做量證實。以太坊付給以「叔區塊」身份爲新塊確認做出貢獻的廢區塊87.5%的獎勵,把它們歸入計算的「侄子區塊」將得到獎勵的12.5%。計算代表,帶有激勵的五層幽靈協議即便在出塊時間爲15s的狀況下也實現了95%以上的效率,而擁有25%算力的礦工從中心化獲得的益處小於3%。

國密算法

國密算法是由中國國家密碼管理局制定的一系列商用密碼學算法,其中包括了對稱加密算法SM1,橢圓曲線非對稱加密算法SM2,雜湊算法SM3等。一般區塊鏈在使用密碼學算法時會採用國際標準,如AES、ECDSA、SHA2等。而國內的金融機構在選用密碼學方案的時候,一般會考慮國密算法。Onchain DNA提供了可選的密碼學模塊,針對不一樣的應用場景能夠選擇不一樣密碼學標準,解決了安全性和政策性風險。

跨鏈互操做

目前,區塊鏈技術正處於百花齊放、百家爭鳴的時代,各類不一樣的區塊鏈紛紛涌現出來,區塊鏈之間的互操做性成爲了一個很是重要而又迫切的需求。企業用戶可能須要在不一樣的鏈之間進行業務遷移;普通用戶可能須要在不一樣的鏈之間進行資產交換;央行的數字法幣可能會須要在各個區塊鏈上流通等。Onchain DNA提供了一種跨鏈互操做協議,經過這種跨鏈協議,用戶能夠跨越不一樣的區塊鏈進行資產交易、合約執行等操做,並保證該操做在各個區塊鏈上的事務一致性。

無鏈結構

正如Corda在白皮書中所宣稱的那樣,它沒有鏈式結構,交易也不向全網進行廣播,而只在交易的參與者和公證人之間發送。所以,數據只有「須要訪問的人」才能訪問,避免了隱私泄露的問題。因爲沒有全局的鏈式結構,每一個節點只存放和本身有關的交易,而無需存放全網的全部交易,大大的節省了空間。

總結

本文從多個維度比較並討論了當前各個區塊鏈框架的特色和功能,並闡述了它們在各方面的優缺點,以及在應用領域上的適用性和侷限性。

比特幣雖然是區塊鏈技術的原型,具備很是重要的地位,但因爲其技術架構的侷限性,如挖礦、非圖靈完備等,很難應用到複雜的業務場景中去,但很是適合用於貨幣發行。

以太坊雖然也採用挖礦的形式,但其幽靈協議提升了挖礦效率,新的共識算法也在開發中。以太坊還開發了較多基於密碼學的隱私保護方案,好比環簽名混幣方案,很是適合於建立去中心化自治組織(Decentralized Autonomous Organization)。

Fabric和Onchain DNA的定位都是企業級區塊鏈解決方案,適合用於定製各類特定業務的聯盟鏈,包括金融領域的應用場景。區別在於Fabric以智能合約爲導向,而Onchain DNA則以數字資產爲導向;前者更適合開發複雜的自定義業務流程,然後者則更適合於構建以數字資產爲核心的金融業務系統或權益登記流轉系統,且具備較強的擴展性。

Corda的定位是用於銀行間業務的「分佈式數據庫」,它摒棄了區塊和鏈式結構,更好地把參與者的業務數據區隔開來;但引入了公證人的角色,網絡結構較爲固定不具靈活性和擴展性,且與現有的銀行體系的運做方式差異不大。

相關文章
相關標籤/搜索