1. 程式人生 > >區塊鏈快速入門(五)——區塊鏈技術的演化

區塊鏈快速入門(五)——區塊鏈技術的演化

學術 出了 計算機系 blog 供應鏈 img 相關信息 擴容 actions

區塊鏈快速入門(五)——區塊鏈技術的演化

一、區塊鏈技術的發展

比特幣區塊鏈面向轉賬場景,支持簡單的腳本計算。如果引入更多復雜的計算邏輯,將能支持更多應用場景,即智能合約(Smart Contract)。智能合約可以提供除了貨幣交易功能外更靈活的合約功能,執行更為復雜的操作。
引入智能合約的區塊鏈,已經超越了單純數據記錄功能;可以為區塊鏈加入權限管理,高級編程語言支持等,實現更強大的、支持更多商用場景的分布式賬本系統。
區塊鏈技術的三種典型演化場景如下:
技術分享圖片

二、區塊鏈技術的分類

根據參與者的不同,區塊鏈可以分為公有(Public)鏈、聯盟(Consortium)鏈和私有(Private)鏈。
公有鏈,即任何人都可以參與使用和維護,參與者多為匿名。典型的如比特幣和以太坊區塊鏈,信息是完全公開的。

如果進一步引入許可機制,可以實現私有鏈和聯盟鏈兩種類型。
私有鏈,由集中管理者進行管理限制,只有內部少數人可以使用,信息不公開,跟傳統中心化記賬系統的差異不明顯。
聯盟鏈則介於兩者之間,由若幹組織一起合作(如供應鏈機構或銀行聯盟等)維護一條區塊鏈,該區塊鏈的使用必須是帶有權限的限制訪問,相關信息會得到保護,典型如超級賬本項目。在架構上,現有大部分區塊鏈在實現都至少包括了網絡層、共識層、智能合約和應用層等分層結構,聯盟鏈實現往還會引入額外的權限管理機制。
目前來看,公有鏈信任度最高,也容易引發探討,但短期內更多的應用會首先在聯盟鏈上落地。公有鏈因為要面向匿名公開的場景,面臨著更多的安全挑戰和風險;同時為了支持互聯網尺度的交易規模,需要更高的可擴展性,性能瓶頸在短期內很難得到解決。
對於信任度和中心化程度的關系,通常非中心化程度越高,信任度會越好。隨著節點數增加,前期的信任度往往會增長較快,達到一定程度後,信任度隨節點數增多並不會得到明顯改善。因為隨著成員數的增加,要實現共謀作惡的成本會指數上升。
根據使用目的和場景的不同,可以分為以數字貨幣為目的的貨幣鏈,以記錄產權為目的的產權鏈,以眾籌為目的的眾籌鏈等,也有不局限特定應用場景的所謂通用鏈。通用鏈因為要兼顧不同場景下的應用特點,在設計上需要考慮更加全面。

三、區塊鏈共識算法的演化

1、區塊鏈共識算法的發展

區塊連常見共識算法包括Paxos、Raft、PBFT、POW、POS、DPOS等,但隨著區塊鏈技術的發展,不同區塊鏈項目在不同應用場景下通過對基礎的共識算法的相互融合、改進,誕生了多種新的共識算法,如DBFT、BFT-DPoS、SBFT、VBFT、Tendermint等。

(1)DBFT
DBFT(Delegated Byzantine Fault Tolerant),即代理拜占庭容錯算法,是基於PBFT改進的區塊鏈共識算法。
DBFT的算法中,參與記賬的是超級節點,普通節點可以看到共識過程,並同步賬本信息,但不參與記賬。總共n個超級節點分為一個議長和n-1個議員, 議長會輪流當選。每次記賬時,先有議長發起區塊提案(擬記賬的區塊內容), 一旦有至少(2n+1)/3個記賬節點(議長加議員)同意提案,那麽提案就成為最終發布的區塊,並且該區塊是不可逆的,所有裏面的交易都是百分之百確認的,區塊不會分叉。
為了便於在區塊鏈開放系統中應用,DBFT將PBFT中的將C/S(客戶機/服務器)架構的請求響應模式,改進為適合P2P網絡的對等節點模式,並將靜態的共識參與節點改進為可動態進入、退出的動態共識參與節點,使其適用於區塊鏈的開放節點環境。
由於BFT算法存在的擴容性問題,DBFT算法由權益持有者投票選舉產生代理記賬人,由代理人驗證和生成區塊,以此大幅度降低共識過程中的節點數量,解決了BFT算法固有的擴容性問題。
NEO項目使用了DBFT共識算法,NEO共識機制下只設置了7個超級節點,以一種弱中心化的模式實現較高的共識效率。目前,超級節點是靜態選出的,並完全由項目方部署。
DBFT的優點如下:
A、效率高。
NEO每15~20秒生成一個區塊,交易吞吐量可達到約1000TPS,優化後性能可達10000TPS;
B、良好的最終性。
區塊不會分叉,以此來驗證參與者的身份,保護網絡安全,使區塊鏈能夠適用於對交易確認實時性要求高的真實金融場景。
DBFT的缺點如下:
A、較低的容錯率。
當有1/3或以上超級節點為惡意節點或宕機後,系統將無法提供服務。
B、超級節點數量過少,中心化程度高。
(2)BFT-DPOS
BFT-DPOS(Byzantine Fault Tolerance - Delegated Proof of Stake),即帶拜占庭容錯的股份授權證明算法,是EOS項目通過引入PBFT算法對DPOS進行改進而來的共識算法。
在傳統DPOS共識機制中,每個受托人在出塊時向全網廣播新創建區塊,但即使其它受托人收到目前的新區塊,也無法對新區塊進行確認,需要等待輪到自己出塊時,才能通過生產區塊來確認之前的區塊。
BFT-DPOS共識機制下,每個受托人出塊時依然全網廣播,其它受托人收到新區塊後,立即對此區塊進行驗證,並將驗證簽名完成的區塊立即返回出塊受托人,不需等待其它受托人自己出塊時再確認。因此,出塊受托人生產了一個區塊,並全網廣播,然後陸續收到了其它受托人對此區塊的確認,在收到2/3受托人確認的瞬間,區塊(包括其中的交易)就不可逆。
在EOS中有21個超級節點,主要有兩方面原因:一是由於用戶很難對較多數量的超級節點充分了解,所以過多的超級節點會降低用戶投票的活躍度;二是規模為20的節點數目可以在拜占庭問題中以更低的資源成本來獲得高效的共識。
超級節點的主要職責是:提供相關計算資源和網絡資源,保證節點的正常運行;當輪到某超級節點擁有出塊權時,超級節點收集該時段內的所有交易,並對交易驗證後打包成區塊廣播至其它超級節點,其它超級節點驗證後把區塊添加到自己的數據庫中。在EOS中,每個出塊間隔定義為3秒,由於在當前的網絡環境下,一個超級節點打包區塊並將其廣播,絕大多數其它超級節點收到該區塊的過程耗時最多3秒。只有下一個超級節點收到了上一個超級節點廣播的區塊時,再進行新區塊的生成才不會造成對某個超級節點產生區塊的忽略。而一個區塊要成為不可逆區塊需要超過三分之二的超級節點進行確認,在DPOS中只有超級節點產生一個新區塊,才能對之前收到的區塊鏈進行確認,所以一個區塊產生後,其後續串聯14(21個超級節點的2/3)個區塊才表明該區塊是不可逆區塊,區塊中的交易是不可逆交易,整個確認過程需要45秒(包括出塊節點的區塊生成時間)。
為了挖掘EOS系統的性能,Daniel Larimer對BFT-DPOS進行了優化,將出塊速度由3秒縮短至0.5秒,理論上可以極大提升系統性能,但帶來網絡延遲問題:0.5秒的確認時間會導致下一個出塊者還沒有收到上一個出塊者的區塊,就要生產下一個區塊,那麽下一個出塊者會忽略上一個區塊,導致區塊鏈分叉(相同區塊高度有兩個區塊)。
為解決網絡延遲問題,Daniel Larimer將原先的隨機出塊順序改為由受托人商議後確定的出塊順序,網絡連接延遲較低的受托人之間就可以相鄰出塊,大大降低受托人之間的網絡延遲,使得0.5秒的出塊速度具備理論上的可能。
為了保證萬無一失,不讓任何一個受托人因為網絡延遲的意外而被跳過,Daniel Larimer讓每個受托人連續生產6個區塊,即每個見證人還是負責3秒的區塊生產,但由最初的只生產1個變成生產6個。最惡劣的情況下,6個區塊中,最後一個或兩個有可能因為網絡延遲或其它意外被下一個受托人略過,但6 個區塊中的前幾個會有足夠的時間傳遞給下一個受托人。
BFT-DPoS的交易確認時間問題:每個區塊生產後立即進行全網廣播,區塊生產者一邊等待0.5秒生產下一個區塊,同時會接收其它受托人對於上一個區塊的確認結果。新區塊的生產和舊區塊確認的接收同時進行。大部分的情況下,交易會在1秒(包括0.5秒的區塊生產和要求其它受托人確認的時間)之內確認(不可逆)。
EOS系統規定,一旦區塊達到不可逆狀態(2/3受托人確認),就無法在此之前進行分叉,保證交易的永久可信。即使多數見受托人想分叉區塊鏈,也只能以相同的速度(0.5秒)與主鏈競爭,就算主鏈只剩下一個受托人,分叉鏈也永遠不會追上主鏈,保證了系統的穩定。
EOS項目解決的區塊鏈痛點如下:
A、應用性能低?
比特幣和以太坊都面臨應用性能低的瓶頸。隨著交易量和應用的增長,網絡擁堵和手續費飛漲的問題日益凸顯。從交易速度方面看,比特幣為每秒7筆,以太坊交易速度為每秒30-40筆,而EOS則可以達到每秒數百萬筆交易,可以滿足商業級別應用的需要。
EOS基於石墨烯技術,通過並行鏈的方式達到毫秒級的確認速度和數百萬TPS。
B、安全性差 (DPOS共識算法)
EOS采用的是DPOS算法,分叉基本不可能發生,。解決了比特幣和以太坊的鏈分叉問題,從而保障了全網運行的安全性。因為塊生產者生產區塊的方式是合作性的而不是競爭性的。如果發生區塊分叉,DPOS共識將自動切換到最長的鏈條。此外,不會發生塊生產者同時在兩個區塊鏈分叉上生產塊的情況。如果有,就可能被投票出局。
C、開發難度高
比特幣只能作為貨幣交付使用,只滿足交易的功能;以太坊實現了智能合約,突破了比特幣的貨幣功能,向非金融領域邁出了一步,但由於其模塊的復雜性,無法使得開發者輕松自如地創建自己想創建的應用;EOS處理了額外的復雜性,為開發者們提供了用戶友好的底層模塊,可以支持多種編程語言。
D、手續費高
EOS為用戶提供了免費服務,相比較比特幣和以太坊高昂的轉賬手續費,EOS公鏈用戶無需支付手續費。開發者依據用戶規模,創建對應的盈利模式。
(3)SBFT
SBFT(Simpled BFT),即簡化拜占庭容錯算法,是PBFT算法的簡化版本。
在Fabric的提案中,采用SBFT(Simple BFT)算法。但Fabric0.6版本采用PBFT,Fabric1.0中移出了PBFT,而是使用Kafka、Solo進行排序,作為共識節點。Fabric應該會在後期版本實現SBFT。
(4)Tendermint
Tendermint是一個模塊化的區塊鏈應用框架,能夠實現拜占庭容錯 (BFT)。Tendermint主要包括兩部分:
A、Tendermint Core
Tendermint Core實現了P2P網絡,在節點之間共享區塊和交易,實現了拜占庭容錯的共識算法,確定了不可更改的交易順序;
B、ABCI Interface
ABCI Interface負責處理具體的邏輯處理層,可以基於不同的語言 (Golang,JS) 來實現,可以實現交易的驗證處理以及查詢等操作。
Tendermint地址:https://github.com/tendermint/tendermint
Tendermint官方網站:https://tendermint.com/
(5)VBFT
VBFT算法融合POS、VRF以及BFT的思想。在VBFT算法中,節點需要通過權益抵押來申請參與網絡共識。此後,系統通過可驗證隨機函數來隨機從所有備選的共識節點中選擇n個節點,並提出、驗證備選區塊,最終通過對驗證結果進行背書投票來完成區塊共識。
共識節點構成共識網絡,負責對網絡中的事務請求進行共識,生成區塊;而備選的共識節點構成候選網絡,不參與共識,但保持與共識網絡同步的狀態。此外,候選網絡對共識網絡進行監控,並對共識區塊進行驗證。
VBFT算法流程如下:
A、根據VRF從共識網絡中選擇備案提案節點,各個備選節點獨立提出備選區塊。
B、根據VRF從共識網絡中選擇多個驗證節點,每個驗證節點將從網絡中收集備選區塊,進行驗證,然後對最高優先級的備選區塊進行投票。
C、根據VRF從共識網絡中選擇多個確認節點,對上述驗證節點的投票結果進行統計驗證,並決定最終的共識結果。
D、所有節點接受確認節點的共識結果,開始下一輪共識流程。
在VBFT算法中,每一輪區塊的VRF值都基於上一輪共識區塊的易變信息,並通過計算該信息的哈希值來作為下一輪共識區塊的VRF值。由此,每一個區塊的VRF值都是可驗證的。
根據VBFT文中介紹,依據VRF選定節點的同時,也確定了節點的排序順序,即節點的優先級順序。優先級順序的存在,為節點應對主鏈分叉提供了參考方案。由於惡意分叉很難一直維持最高優先級,從而達到遏制惡意分叉的目的。

2、區塊鏈共識算法的選擇

在區塊鏈網絡中,由於應用場景的不同,所設計的目標各異,不同的區塊鏈系統采用了不同的共識算法。通常,在私有鏈和聯盟鏈情況下,對一致性、正確性有很強的要求,要采用強一致性的共識算法;而在公有鏈情況下,對一致性和正確性通常沒法做到百分之百,通常采用最終一致性(Eventual Consistency)的共識算法。
共識算法的選擇與應用場景高度相關,可信環境使用Paxos算法或者Raft算法,帶許可的聯盟可使用PBFT算法,非許可鏈可以使用POW,POS,Ripple共識等,根據對手方信任度分級,自由選擇共識機制。

四、區塊鏈的關鍵問題和挑戰

1、隱私保護

隱私保護一直是分布式系統領域十分關鍵的問題。在分布式場景下,因為缺乏獨立的管理機制,參與網絡的各方無法保證嚴格遵守協議,甚至會故意試圖獲取網絡中他人的數據,對於隱私的竊取行為都很難進行約束。
而分布式賬本要在共享協同信息和隱私保護之間達到合適的平衡,是個不小的挑戰,特別隨著公有賬本系統屢屢出現安全漏洞,動輒造成數千萬美金的風險。隨著《一般數據保護條例》(General Data Protection Regulation,GDPR)的落地,隱私保護的合規要求愈加嚴格。傳統的信息安全技術、形式化驗證技術在應對新的需求時暴露出實踐性不強的缺陷,都亟待解決。尤其以醫療健康領域,對數據的隱私性需求最為強烈,要求嚴格控制數據的來源、所有權和使用範圍,傳統手段很難滿足隱私保護特性需求,需要有機結合零知識證明、同態加密等新的密碼學手段,但新技術在實際應用中還存在不少問題。

2、分布式共識

共識是分布式系統領域經典的技術難題,學術界和業界都已有大量的研究成果(包括Paxos、BFT系列算法等)。
分布式共識問題的核心在於確保某個變更在分布式網絡中得到一致的執行結果,是被參與多方都承認的,同時信息是不可推翻的。
分布式共識在公開匿名場景下和帶權限管理的場景下需求差異較大,從而導致了基於概率的算法和確定性算法兩類思想。
最初,比特幣區塊鏈考慮的是公開匿名場景下的最壞保證。通過引入了POW工作量證明策略來規避少數人的惡意行為,並通過概率模型保證最後參與方共識到最長鏈。POW算法的核心思想是基於經濟利益的博弈,讓惡意破壞的參與者損失經濟利益,從而保證大部分人的合作。同時,確認必須經過多個區塊的生成後達成,從概率上進行保證。概率性算法的主要問題在於效率的低下和能源的浪費,如POW,POS和DPOS算法等。
區塊鏈技術(如超級賬本)在帶權限許可的場景下,開始考慮支持更多的確定性的共識機制,包括BFT系列算法等,可以解決快速確認的問題。
共識問題在很長一段時間內都將是極具學術價值的研究熱點,核心的指標將包括容錯的節點比例、決策收斂速度、出錯後的恢復、動態特性等。POW等基於概率的系列算法理論上允許少於一半的不合作節點,BFT等確定性算法理論上則允許不超過1/3的不合作節點。

3、交易性能

通常,區塊鏈並不適用於高頻交易的場景,但由於金融系統的需求,業界目前十分關心如何盡量提高區塊鏈系統的交易性能,包括吞吐量和確認延遲兩個方面。
目前,公開的比特幣區塊鏈只能支持平均每秒約7 筆的吞吐量,安全的交易確認時間為一個小時左右;以太坊區塊鏈的吞吐量略高,能達到幾十筆每秒,但交易性能也是較大的瓶頸。
為了提高處理性能,一方面可以提升單個節點的性能(如采用高配置的硬件),同時設計優化的策略和算法,提高性能;另外一方面可將交易處理卸載(off-load)到鏈下。只用區塊鏈記錄最終交易信息,如比特幣社區提出的閃電網絡等設計。側鏈(side chain)、影子鏈(shadow chain)等思路在當前階段也有一定的借鑒意義,可將整體性能提升1~2個數量級。
聯盟鏈場景下,參與多方存在一定的信任前提和利益約束,可以采取更優化的設計,換來性能的提升。以Hyperleger Fabric項目為例,在普通虛擬機配置下,單客戶端每秒可以達到數百次(Transactions per second,TPS)的交易吞吐量;在有一定工程優化或硬件加速情況下可以達到每秒數千次的吞吐量。
目前開源區塊鏈系統已經可以滿足不少應用場景的性能需求,但離大規模交易系統每秒穩定數萬筆的吞吐性能還有較大差距。根據公開的數據,VISA系統的處理均值為2000 TPS,峰值為56,000TPS;某金融支付系統的處理峰值超過85,000TPS;大型證券交易所的處理均值在 80,000TPS左右。

4、可擴展性

常見的分布式系統,可以通過橫向增加節點來擴展整個系統的處理能力。
大部分區塊鏈系統的性能很大程度上取決於單個節點的處理能力,節點需要滿足高性能、安全、穩定、硬件輔助加解密能力。例如,對於比特幣和以太坊區塊鏈,網絡中每個參與維護的核心節點都要保持一份完整的存儲,並且進行智能合約的處理。此時,整個網絡的總存儲和計算能力,取決於單個節點的能力。甚至當網絡中節點數過多時,可能會因為共識延遲而降低整個網絡的性能。尤其在公有網絡中,由於大量低性能處理節點的存在,問題將更加明顯。
要解決區塊鏈系統的擴展能力,根本上是放松對每個節點都必須參與完整處理的限制(網絡中節點要能合作完成完整的處理),已經在超級賬本項目中得到應用;同時盡量減少核心層的處理工作,甚至采用多層處理結構來分散交易。
在聯盟鏈模式下,可以專門采用高性能的節點作為核心節點,用相對較弱的節點作為代理訪問節點。
另外,未來必然會涉及到不同賬本之間互通的跨鏈需求。超級賬本的Quilt項目和W3C的Interledger Payments工作組已對此問題開展研究。

5、安全防護

區塊鏈目前最熱門的應用場景是金融相關的服務,安全自然是最敏感也是挑戰最大的問題。

6、數據庫和存儲系統

區塊鏈網絡中的大量信息需要寫到文件和數據庫中進行持久化存儲。
區塊鏈的應用需要進行大量的讀寫操作、Hash計算和驗證操作,跟傳統數據庫的行為十分不同。
LevelDB、RocksDB 等鍵值數據庫,具備很高的隨機寫和順序讀、寫性能,以及相對較差的隨機讀的性能,被廣泛應用到了區塊鏈信息存儲中。但目前來看,面向區塊鏈的數據庫技術仍然是需要突破的技術難點之一,特別是如何支持更豐富語義的操作。未來將可能出現更具針對性的區塊鏈數據庫,專門服務區塊鏈新型數據業務,其中每條記錄將包括一個完整的區塊信息,並天然地跟歷史信息進行關聯,一旦寫入確認則無法修改。所有操作的最小單位將是一個塊。需要原生支持高效的簽名和加解密處理。

7、集成和運營治理

大部分企業內和企業之間都已經存在一些信息化產品和工具,例如處於核心位置的數據庫、企業信息管理系統、通訊系統等。企業在采用新的產品時,往往會重點考察與已有商業流程和信息系統進行集成時的平滑度。
兩種系統如何共存,如何分工,彼此的業務交易如何進行合理傳遞,出現故障如何排查和隔離,已有數據如何在不同系統之間進行遷移和災備,都是很迫切要解決的實際問題。解決不好,將是區塊鏈技術落地的不小阻礙。
雖然大部分區塊鏈系統在平臺層面都支持了非中心化機制,在運營和治理層面確往往做不到非中心化。以比特幣網絡為例,歷史上多次發生過大部分算力集中在少數礦池的情況,同時軟件的演化路線集中在少數開發者手中。運營和治理機制是現有區塊鏈系統中普遍缺失的,但在實際應用中又十分重要。
如何進行合理的共識、高效的治理仍屬於尚未解決的問題。公有鏈中試圖通過將計算機系統中的令牌與經濟利益掛鉤,維護系統持續運行;聯盟鏈中通過商業合作和投票等方式,推舉聯盟治理機構,進行聯盟網絡的維護管理。但相關機制仍需在實踐過程中不斷完善和改進。以供應鏈場景為例,動輒涉及到數百家企業,上下遊幾十個環節,而且動態性較強,都需要分布式賬本平臺能提供很強的治理投票和權限管控機制。

區塊鏈快速入門(五)——區塊鏈技術的演化