為什麼會出現區塊鍊:
一直以來我們所處的社會信用體系很大一部分都是中心化的:如貨币是政府發行的,政府決定着貨币價值的升漲,如我們的錢存于銀行,錢不翼而飛我們也不得原因;這裡政府和銀行就是中心地位的管理者,也許我們不信任中心地位的管理者,但是在中心化的信用體系下我們也無可奈何,傳統的資料庫有一個中央管理系統,管理者可以在權限範圍内任意更改資料庫,處于中心地位的管理當局有太大權限,可以在隐私狀态下更改資料,誰控制了管理權誰就控制了整個平台,所有使用者都要聽命于管理者,這就帶來不信任性。是以我們希望能存在這麼一種信用體系,規則和記錄一旦生成,任何人不能私自篡改,并且資訊是對大家都透明的,換句話說就是去中心化的,這就誕生了區塊鍊技術。
區塊鍊是什麼:
區塊鍊從功能上講是用來存儲資訊的,任何需要儲存的資訊,都可以寫入區塊鍊,也可以從裡面讀取,是以首先它是資料庫。一句話,它是一種特殊的分布式資料庫技術的實作。首先,區塊鍊的主要作用是儲存資訊。任何需要儲存的資訊,都可以寫入區塊鍊,也可以從裡面讀取,是以它是資料庫。其次,任何人都可以架設伺服器,加入區塊鍊網絡,成為一個節點。區塊鍊的世界裡面,沒有中心節點,每個節點都是平等的,都儲存着整個資料庫。你可以向任何一個節點,寫入/讀取資料,因為所有節點最後都會同步,保證區塊鍊一緻。分布式資料庫并非新發明,市場上早有此類産品。但是,區塊鍊有一個革命性特點。區塊鍊沒有管理者,它是徹底無中心的。其他的資料庫都有管理者,但是區塊鍊沒有。如果有人想對區塊鍊添加稽核,也實作不了,因為它的設計目标就是防止出現居于中心地位的管理當局。正是因為無法管理,區塊鍊才能做到無法被控制。否則一旦大公司大集團控制了管理權,他們就會控制整個平台,其他使用者就都必須聽命于他們了。
區塊是什麼:
區塊鍊由一個個區塊(block)組成。區塊很像資料庫的記錄,每次寫入資料,就是建立一個區塊。區塊包含兩部分:區塊頭和區塊體。
區塊頭(Head):記錄了目前區塊的多項特征值.包含區塊生成時間,實際資料(即區塊體)的哈希,上一個區塊的哈希等。
區塊體(Body):儲存區塊的實際資料,這些資料就是曆史交易記錄,也可以認為是“賬本”。
更重要的一點是區塊與哈希是一一對應的,每個區塊的哈希都是針對"區塊頭"(Head)而不是區塊體計算的,也就是說哈希由區塊頭唯一決定。具體實作是把區塊頭的各項特征值,按照順序連接配接在一起,組成一個很長的字元串,再對這個字元串計算哈希。由于區塊頭包含很多内容,其中有目前區塊體的哈希,還有上一個區塊的哈希。這意味着,如果目前區塊體的内容變了,或者上一個區塊的哈希變了,一定會引起目前區塊的哈希改變。這一點對區塊鍊有重大意義。如果有人修改了一個區塊,該區塊的哈希就變了。為了讓後面的區塊還能連到它(因為下一個區塊包含上一個區塊的哈希),該人必須依次修改後面所有的區塊,否則被改掉的區塊就脫離區塊鍊了。由于後面要提到的原因,哈希的計算很耗時,短時間内修改多個區塊幾乎不可能發生,除非有人掌握了全網51%以上的計算能力。正是通過這種關聯機制,區塊鍊保證了自身的可靠性,資料一旦寫入,就無法被篡改。這就像曆史一樣,發生了就是發生了,從此再無法改變。每個區塊都首尾連結在其他區塊上,這也是區塊鍊的名字由來。
挖礦是怎麼回事:
由區塊鍊的原理我們知道,每當區塊改變時,全網所有節點都要同步區塊鍊,這就很有問題了,我為什麼要浪費自己的資源來幫别人記賬還要時刻同步呢。現在的社會是無利不起早,要想全網的節點都第一次時間同步區塊,礦工們在挖礦過程中會得到兩種類型的獎勵:建立新區塊的新币獎勵,以及區塊中所含交易的交易費。為了得到這些獎勵,礦工們争相完成一種基于加密雜湊演算法的數學難題,這些難題的答案包括在新區塊中,作為礦工的計算工作量的證明,被稱為”“工作量證明”。該算法的競争的機制以及獲勝者有權在區塊鍊上進行交易記錄的機制,這二者是比特币安全的基石。
新比特币的生成過程被稱為挖礦是因為它的獎勵機制被設計為速度遞減模式,類似于貴重金屬的挖礦過程。比特币的貨币是通過挖礦發行的,類似于中央銀行通過印刷銀行紙币來發行貨币。礦工通過創造一個新區塊得到的比特币數量大約每四年(或準确說是每210,000個塊)減少一半。開始時為2009年1月每個區塊獎勵50個比特币,然後到2012年11月減半為每個區塊獎勵25個比特币。之後将在2016年的某個時刻再次減半為每個新區塊獎勵12.5個比特币。基于這個公式,比特币挖礦獎勵以指數方式遞減,直到2140年。屆時所有的比特币(20,999,999.98)全部發行完畢。換句話說在2140年之後,不會再有新的比特币産生。
礦工們同時也會擷取交易費。每筆交易都可能包含一筆交易費,交易費是每筆交易記錄的輸入和輸出的差額。在挖礦過程中成功“挖出”新區塊的礦工可以得到該區塊中包含的所有交易“小費”。目前,這筆費用占礦工收入的0.5%或更少,大部分收益仍來自挖礦所得的比特币獎勵。然而随着挖礦獎勵的遞減,以及每個區塊中包含的交易數量增加,交易費在礦工收益中所占的比重将會逐漸增加。在2140年之後,所有的礦工收益都将由交易費構成。
具體的内容見:http://zhibimo.com/read/wang-miao/mastering-bitcoin/Chapter08.html
區塊鍊的應用場景:
未來幾年内,可能深入應用區塊鍊技術的場景将包括:
金融服務:區塊鍊帶來的潛在優勢包括降低交易成本、減少跨組織交易風險等。該領域的區塊鍊應用目前最受關注,全球不少銀行和金融交易機構都是主力推動者。部分投資機構也在應用區塊鍊技術降低管理成本和管控風險。從另一方面,要注意可能引發的問題和風險。例如,DAO(Decentralized Autonomous Organization 是史上最大的一次衆籌活動,基于區塊鍊技術確定資金的管理和投放)這樣的衆籌實驗,提醒應用者在業務和營運層面都要謹慎處理。
征信和權屬管理:征信和權屬的數字化管理是大型社交平台和保險公司都夢寐以求的。目前該領域的主要技術問題包括缺乏足夠的資料和分析能力;缺乏可靠的平台支援以及有效的資料整合管理等。區塊鍊被認為可以促進資料交易和流動,提供安全可靠的支援。征信行業的門檻比較高,需要多方資源共同推動。
資源共享:以 Airbnb 為代表的分享經濟公司将歡迎去中心化應用,可以降低管理成本。該領域主題相對集中,設計空間大,受到大量的投資關注。
貿易管理:區塊鍊技術可以幫助自動化國際貿易和物流供應鍊領域中繁瑣的手續和流程。基于區塊鍊設計的貿易管理方案會為參與的多方企業帶來極大的便利。另外,貿易中銷售和法律合同的數字化、貨物監控與檢測、實時支付等方向都可能成為創業公司的突破口。
物聯網:物聯網也是很适合應用區塊鍊技術的一個領域,預計未來幾年内會有大量應用出現,特别是租賃、物流等特定場景,都是很合适結合區塊鍊技術的場景。但目前階段,物聯網自身的技術局限将造成短期内不會出現大規模應用。
這些行業各有不同的特點,但或多或少都需要第三方擔保機構的參與,是以都可能從區塊鍊技術中獲得益處。
認識上的誤區
目前,由于區塊鍊自身仍是一種相對年輕的技術,不少人對區塊鍊的認識還存在一些誤區。下面,是需要注意的一些問題:
首先,區塊鍊不等于比特币。雖說區塊鍊的基本思想誕生于比特币的設計中,但發展到今日,比特币和區塊鍊已經俨然成為了兩個不太相關的技術。前者更側重從數字貨币角度發掘比特币的實驗性意義;後者則從技術層面探讨和研究可能帶來的商業系統價值,試圖在更多的場景下釋放智能合約和分布式賬本帶來的科技潛力。
其次,區塊鍊不等于資料庫。雖然區塊鍊也可以用來存儲資料,但它要解決的核心問題是多方的互信問題。單純從存儲資料角度,它的效率可能不高,筆者也不推薦把大量的原始資料放到區塊鍊系統上。當然,現在已有的區塊鍊系統中,資料庫相關的技術十分關鍵,直接決定了區塊鍊系統的吞吐性能。
TODO: bigchaindb, chainsql
最後,區塊鍊并非一門萬能的颠覆性技術。作為融合多項已有技術而出現的新事物,區塊鍊跟現有技術的關系是一脈相承的。它在解決多方合作和可信處理上向前多走了一步,但并不意味着它是萬能的,更不會徹底颠覆已有的商業模式。很長一段時間裡,區塊鍊所适用的場景仍需不斷摸索,并且跟已有系統也必然是長期合作共存的關系。
區塊鍊目前還存在的問題
1:安全性和隐私性。
怎麼防止交易記錄被篡改?怎麼證明交易雙方的身份?怎麼保護交易雙方的隐私?密碼學的發展,為解決這些問題提供了不少手段。傳統方案包括 Hash 算法,加解密算法,數字證書和簽名(盲簽名、環簽名)等。随着區塊鍊技術的應用,新出現的需求将刺激密碼學的進一步發展,包括更高效的随機數産生、更高強度的加密、更快速的加解密處理等。同時,量子計算等新技術的出現,也會帶來更多的挑戰,例如,RSA 算法等目前商用的加密算法,在未來可能無法提供足夠的安全性。能否滿足這些新的需求,将依賴于數學科學的進一步發展和新一代計算技術的突破。
2:分布式的區塊如何達成共識
這是個經典的技術難題,學術界和業界都已有大量的研究成果(包括 Paxos、拜占庭系列算法等)。問題的核心在于如何解決某個變更在分布式網絡中得到一緻的執行結果,是被參與多方都承認的,同時這個資訊是被确定的,不可推翻的。該問題在公開匿名場景下和帶權限管理的場景下需求差異較大,進而導緻了基于機率的算法和确定性算法兩類思想。
最初,比特币區塊鍊考慮的是公開匿名場景下的最壞保證。通過引入了“工作量證明”(Proof of Work)政策來規避少數人的惡意行為,并通過機率模型保證最後參與方共識到最長鍊。算法在核心思想上是基于經濟利益的博弈,讓惡意破壞的參與者損失經濟利益,進而保證大部分人的合作。同時,确認必須經過多個區塊的生成之後達成,從機率上進行保證。這類算法的主要問題在于效率的低下。類似算法,還有以權益為抵押的 PoS、DPoS 和 Casper 等。後來更多的區塊鍊技術(如超級賬本)在帶權限管理的場景下,開始考慮支援更多的确定性的共識機制,包括經典的拜占庭算法等,可以解決快速确認的問題。
共識問題在很長一段時間内都将是極具學術價值的研究熱點,核心的名額将包括容錯的節點比例、決策收斂速度、出錯後的恢複、動态特性等。PoW 等基于機率的系列算法理論上允許少于一半的不合作節點,PBFT 等确定性算法理論上則允許不超過 1/3 的不合作節點。
3:交易的性能
雖然一般說來,區塊鍊不适用于高頻交易的場景,但由于金融系統的需求,業界目前十分關心如何提高區塊鍊系統交易的吞吐量,同時降低交易的确認延遲。
目前,公開的比特币區塊鍊隻能支援平均每秒約 7 筆的吞吐量,一般認為對于大額交易來說,安全的交易确認時間為一個小時左右。以太坊區塊鍊的吞吐量略高一些,但交易性能也被認為是較大的瓶頸。
注:實際上,小額交易隻要确認被廣播到網絡中并帶有合适的交易服務費用,即有較大機率被最終打包。
區塊鍊系統跟傳統分布式系統不同,其處理性能很難通過單純增加節點數來進行橫向擴充。實際上,傳統區塊鍊系統的性能,在很大程度上取決于單個節點的處理能力。高性能、安全、穩定性、硬體輔助加解密能力,都将是考察節點性能的核心要素。
這種場景下,為了提高處理性能,一方面可以提升單個節點的性能(如采用高配置的硬體),同時設計優化的政策和算法,提高性能;另外一方面試圖将大量高頻的交易放到鍊外來,隻用區塊鍊記錄最終交易資訊,如比特币社群提出的 閃電網絡 等設計。類似地,側鍊(side chain)、影子鍊(shadow chain)等思路在目前階段也有一定的借鑒意義。類似設計可以将交易性能提升 1~2 個數量級。
此外,在聯盟鍊的場景下,參與多方存在一定的信任前提和利益限制,可以采取更優化的設計,換來性能的提升。以超級賬本 Fabric 項目為例,在普通虛拟機配置下,單用戶端每秒可以達到數百次(Transactions per second,tps)的交易吞吐量;在有一定工程優化或硬體加速情況下可以達到每秒數千次的吞吐量。
客觀地說,目前開源區塊鍊系統已經可以滿足不少應用場景的性能需求,但離大規模交易系統的每秒數萬筆的吞吐性能還有較大差距。
注:據公開的資料,VISA 系統的處理均值為 2,000 tps,峰值為 56,000 tps;某金融支付系統的處理峰值超過了 85,000 tps;某大型證券交易所号稱的處理均(峰)值在 80,000 tps 左右。
4:擴充性
常見的分布式系統,可以通過橫向增加節點來擴充整個系統的處理能力。
對于區塊鍊網絡系統來說,根據共識機制的不同,這個問題往往并非那麼簡單。
例如,對于比特币和以太坊區塊鍊而言,網絡中每個參與維護的核心節點都要保持一份完整的存儲,并且進行智能合約的處理。此時,整個網絡的總存儲和計算能力,取決于單個節點的能力。甚至當網絡中節點數過多時,可能會因為一緻性的達成過程延遲降低整個網絡的性能。尤其在公有網絡中,由于大量低性能處理節點的存在,問題将更加明顯。
要解決這個問題,根本上是放松對每個節點都必須參與完整處理的限制(當然,網絡中節點要能合作完成完整的處理),這個思路已經在超級賬本中得到應用;同時盡量減少核心層的處理工作。
在聯盟鍊模式下,還可以專門采用高性能的節點作為核心節點,用相對較弱的節點僅作為代理通路節點。
5:資料庫和存儲系統
區塊鍊網絡中的大量資訊需要寫到檔案和資料庫中進行存儲。
觀察區塊鍊的應用,大量的讀寫操作、Hash 計算和驗證操作,跟傳統資料庫的行為十分不同。
當年,人們觀察到網際網路應用大量非事務性的查詢操作,而設計了非關系型(NoSQL)資料庫。那麼,針對區塊鍊應用的這些特點,是否可以設計出一些特殊的針對性的資料庫呢?
LevelDB、RocksDB 等鍵值資料庫,具備很高的随機寫和順序讀、寫性能,以及相對較差的随機讀的性能,被廣泛應用到了區塊鍊資訊存儲中。但目前來看,面向區塊鍊的資料庫技術仍然是需要突破的技術難點之一,特别是如何支援更豐富語義的操作。
大膽預測,未來将可能出現更具針對性的“塊資料庫(BlockDB)”,專門服務類似區塊鍊這樣的新型資料業務,其中每條記錄将包括一個完整的區塊資訊,并天然地跟曆史資訊進行關聯,一旦寫入确認則無法修改。所有操作的最小機關将是一個塊。為了實作這種結構,需要原生支援高效的簽名和加解密處理。
6:內建和營運
即便大量企業系統準備遷移到區塊鍊平台上,在相當長的一段時間内,基于區塊鍊的新業務系統必将與已有的中心化系統內建共存。
兩種系統如何共存,如何分工,彼此的業務交易如何進行合理傳遞?出現故障如何排查和隔離?已有資料如何在不同系統之間進行遷移和災備?區塊鍊系統自身又該如何進行營運,包括網絡的設計選擇、狀态監控、災備等。
這些都是很迫切要解決的實際問題。解決不好,将是區塊鍊技術落地的不小阻礙。