1. 程式人生 > >【問鏈-區塊鏈基礎知識系列】 第十課 首席架構師談區塊鏈技術演進

【問鏈-區塊鏈基礎知識系列】 第十課 首席架構師談區塊鏈技術演進

一、區塊鏈和比特幣,都有“幣-鏈-網”三層含義

1、第一層含義是“幣”。這個“幣”並不是剛才王行長所說的真正意義上的“貨幣”,而是一種與區塊鏈密切相關的通證(Blockchain Token)。其本質,是記錄在區塊鏈賬本結構中的某個“元資訊”。例如,比特幣區塊鏈的賬本中的記錄的主要元資料結構就是“交易”,那麼它所交易的是什麼東西呢?實際上就是一個記賬符號。一個單位的記賬符號,就對應一個比特幣(bitcoin)。所有的公有區塊鏈,都不可避免的引入了某種經濟激勵機制,也就是說,都內建有與區塊鏈密切相關的Token。例如,比特幣區塊鏈有比特幣,以太坊區塊鏈有以太幣,Ripple區塊鏈有瑞波幣等等。

2、第二層含義是“鏈”。這個鏈,一方面是指特殊的“塊鏈式”的資料結構;另一方面,是指圍繞這個資料結構的應用軟體系統,我稱之為區塊鏈節點(Blockchain Node)。

3、第三層含義是“網”。是由多個區塊鏈節點而構成的網路(Node Network),這是一個軟體定義的網路。

二、區塊鏈的概念

首先,從包含關係上看,區塊鏈也可以無“幣”。在比特幣誕生後的很長一段時間,鏈和“幣”是密不可分的。在2016年3月,英國政府首席科學顧問發表了一份研究報告《分散式賬本技術:超越區塊鏈》,定義了一個新術語——分散式總賬技術(DLT),而區塊鏈只是實現分散式總賬的技術之一。也就是說DLT是去“幣”化的,但並沒有說明區塊鏈是否需要去“幣”化。再後來,R3和SWIFT也分別發表了相關研究報告,進一步將區塊鏈與密碼學貨幣(Crypto-currency)區分開來。一般來說,公有區塊鏈系統,如比特幣、以太坊等,通常都有自帶有原生“幣”。雖然早些時候,人們稱之為“密碼學貨幣”,但其實際上只是一種記賬符號,也就是通證(Token)。而對於私有鏈和與聯盟鏈而言,則可以沒有“幣”。

在這裡插入圖片描述
圖1:區塊鏈的概念體系

其次,從層次關係來講,區塊鏈就類似於一個作業系統,而比特幣或者是各種各樣區塊鏈應用,則類似於執行在作業系統之上的一個軟體應用。

最後,從先後關係來看,兩者是有某種先後順序的。不過,這裡有兩個不同的結論。一個結論是從詞語的產生來看,比特幣(Bitcoin)這個詞是2008年隨著中本聰的論文《Bitcoin: A Peer-to-Peer Electronic Cash System》而產生的,而區塊鏈(Blockchain)則是到2015年才出現,所以,是“先有幣後有鏈”。而另一個想反的結論則是從前面“比特幣是區塊鏈第一個應用”這個觀點推導而出,是“先有區塊鏈,後有比特幣”。至於到底誰先誰後,其實就和“雞蛋先後問題”一樣,不用太過糾結。

三、區塊鏈到底是什麼?

對於“區塊鏈”,其實還沒有業界公認的、嚴格的定義。套用區塊鏈的行話來說,就是還沒達成共識。我曾經直接或間接參與多項區塊鏈標準的制定,每個標準都重新對區塊鏈做出了自己的定義,而且每一個定義都還不一樣。

這裡,我不做嚴格的定義,而是通過幾個簡單的類比,來解釋什麼是區塊鏈。

在這裡插入圖片描述

圖2:區塊鏈的概念類比

第一個類比,是根據中本聰的白皮書來理解區塊鏈的,把它視為一種分散化、去信任、集體維護的“可靠資料庫”。更具體一點,是一種分散式、多副本、防篡改的資料庫。但這個定義,會讓人有一種錯覺,好像我們可以簡單地用區塊鏈產品去替代已經被廣泛使用的傳統資料庫。但是,如果這麼做了之後,會發現它一點也不好用,效能也不行,吞吐率很低,延遲也很大,很難支援同步性的業務,遠遠比不上原有的資料庫系統。

第二個類比,大家根據2015年美國《經濟學人》雜誌的封面文章來理解區塊鏈,認為其是一種“信任的機器”,可以讓信任得以傳遞,並源源不斷地產生新的信任關係。

第三個類比,是以太坊創始人Vitalik Buterin提出的“世界計算機”的概念,他認為,以太坊就是一個人人能用、永不停止的世界級計算機,任何人都能夠以無伺服器(Serverless)模式執行計算,也就是說,只需編寫分散式應用(DApp)並提交給以太坊區塊鏈網路,由以太坊網路去執行相應的計算邏輯。這個願景確實很巨集偉,但是現實很骨感。但是最近一、兩年,以太坊團隊已經不再提這個“世界計算機”概念了,因為其架構,還遠遠不能承載這個願景。幾個月前一個叫“CryptoKitties”的小遊戲,就導致了以太坊網路的嚴重擁堵。

第四個類比,“印刷機的逆向機”,這是長鋏(本名:劉志鵬)提出來的,他是巴位元創始人,同時還是一名科幻作家。他認為,我們面對的有兩個世界,一個是物理世界,一個是數字世界。在物理世界中,每一片樹葉都是不一樣的,每個物品也都是不一樣的,都是競爭性資源,也就是當某人擁有某個物品時,其他人就無法再擁有該物品了。而在數字世界中,一切內容皆可複製,每個複製品都是一模一樣的,每個bit都絕對一致。但是有兩件產品或技術,打破了這個規律。一個是印刷機以及3D印表機,能夠將物理世界的競爭性資源,變成非競爭資源。例如通過紙質影印或3D列印,複製出大量相同內容的紙張或者物品。而區塊鏈則正好相反,能夠把數字世界中的非競爭資源,變成競爭性資源。例如,某人持有了某個比特幣,那麼其他人就無法再擁有了。

在這裡插入圖片描述
圖3:區塊鏈,好似印刷機的逆向機

第五個類比,是“價值網際網路”,能夠讓價值資產在網際網路上進行大範圍地流動,它與現有的“資訊網際網路”相對應。但我覺得這個類比有點誇大,我更傾向於將其類比為一種“新型協作網路”,能夠讓很多很多的人或組織、實現大範圍的平等協作,並形成某種分散的自治性組織(DAO)。

區塊鏈是跨學科的,和好幾個學科都有著極大的交叉,容易帶來跨學科理解上的誤區,尤其對於初學者,很容易導致盲人摸象、管中窺豹的狀況。因此,我們不能從單一的角度去看這個東西,而需要從多個角度、綜合地去思考。

四、區塊鏈核心特性是高度防篡改

剛開始,認為區塊鏈有很多特性,如去中心化、去信任、可靠、匿名、開源、智慧合約、P2P網路等等,但是後來仔細思考,發現這都不是區塊鏈的核心部分。區塊鏈的核心特性只有一條,那就是“高度防篡改”。在2017年4月的騰訊區塊鏈方案白皮書中,開篇提出“打造數字經濟時代信用基石”,其本質也是利用了區塊鏈的這個核心特性。

一般來說,基於傳統PKI體系的數字簽名技術,就可實現防篡改。而區塊鏈技術,在此技術上,有增加了2個維度來提高其防篡改能力。一個是時間維度。因為時間是唯一沒法造假,區塊鏈通過一個一個區塊不斷地疊加時間戳,修改每個區塊,需要同時篡改其後的所有區塊內容,這樣隨著時間持續,篡改的難度也會指數級增長。另一個維度,是集體維護。也就是多個參與方,基於某種預先設定好的共識機制,集體維護區塊鏈賬本的不可篡改性,並能夠有效防範少數參與方的作惡。

既然區塊鏈核心特性是高度防篡改,那麼要把區塊鏈用好,就得圍繞核心特性來。那麼,接下來的問題是,我們需要防篡改的是什麼內容?

目前,我們看到的區塊鏈應用五花八門,非常繁多。其實如果總結起來,大體上可以分為三類。而這三大類應用,就可覆蓋絕大多數的區塊鏈應用場景。

第一類,是資料記錄類。將一些資訊寫入區塊鏈,使其難以被篡改。1)可以寫入資料的雜湊指紋,這樣可以提供存證證明(Proof of Existence),證明某個資料在某個時間點附近存在過。例如,電子合同驗真環節,怎麼證明這個電子合同是原始簽訂的電子合同呢,而不是後來某個時間重新簽發的?以前是採用時間戳加數字簽名技術來實現的,現在就可以藉助區塊鏈技術來實現。時間戳證明的只是孤立的時間點,而區塊鏈證明的則是一條完整時間序列,效果更好。2)可以寫入數字簽名信息,我們就可提供資料確權,不但證明其時間,還可證明其所有權。很多微版權業務,都開始用區塊鏈來實現,而無需通過版權中心等權威機構,成本更低,效率更高,驗證方便。

第二類,是流程溯源類。與資料記錄不同的是,多條記錄之間存在著某種關聯關係。1)非標物的資訊流,如奢侈品、藝術品等,每件物品都是獨一無二的。此時,需要單獨記錄每件物品各個階段的狀態資訊,以及所有權的轉移等,這些都可以採用鍵-值對的方式來實現。2)等標物的資訊流,如食品、藥品等,同一個廠商在相同批次生產的產品,我們可以認為其大致是相同標準、可以互相替換的。這類物品發生所有權轉移時,就不一定是整體轉移,也可能有拆分和合並,就像一袋大米可以分裝成多個小包裝,也可以多個小包裝大米合併成大包裝。這裡面需要嚴格地額度控制,確保總的額度不變。

第三類,是數字資產類。這個是從第二類中的“等標物溯源”衍生過來的,典型的數字資產包括積分、優惠券、票據、數字代幣等等,藉助區塊鏈可靠地記錄數字資產的全部交易過程,使其可信。具體實現方式,一種是基於賬戶模型,如以太坊;一種是基於UTXO交易模型,如比特幣。

三類應用的主要差異,僅僅是在區塊鏈賬本中儲存的資料不同。

五、區塊鏈的技術層級

區塊鏈並不是什麼全新的技術,而是一種新的技術組合,如果拆開來看,每項都是很多年前就已經誕生的老技術。

在這裡插入圖片描述

圖4:區塊鏈的技術層級

下面,我嘗試從傳統分散式技術出發,來理解區塊鏈技術的層級,如圖4所示。

第一層,分散式技術。隨著網際網路技術的發展,我們已經開始從傳統的集中式技術,走向分散式技術,包括分散式網路、分散式計算、分散式儲存等等。

第二層,分散式總賬技術(DLT)。其本質是一種分散式儲存技術。我們需要將資料複製成多個副本,存放在多個位置,通過冗餘來提高資料的可靠性。此時,就面臨著多副本資料一致性的問題。如何實現分散式一致性,同時保持較高的可靠性,是一個很大的課題。目前已經學者以及研究出PAXOS、RAFT等多種分散式一致性演算法,並廣泛應用於分散式資料庫領域。

前兩層,都隱含著一個假設,所有的系統都是執行在一個相對可信的環境,除了宕機故障之外,不會有系統節點故意“作惡”,即產生“拜占庭故障”。但現實中,一旦涉及多個參與主體,一旦跨越不可信的廣域網,“作惡”節點就必然會出現。下面三層,就是為了解決在“弱信任環境”下,達成分散式資料一致性的技術。

第三層,可拜占庭容錯的分散式總賬。簡單說,就是引入一些能夠拜占庭容錯的共識演算法。這裡麵包括PoW、PoS、DPoS之類的大概率一致性演算法,和基於投票的PBFT、RBFT、CBFT等確定一致性演算法。能夠在少數節點“作惡”的情況下,實現資料一致。

第四層,區塊鏈。通過引入密碼學技術(如非對稱加密、雜湊演算法等)以及特定的資料結構(如雜湊指標、塊-鏈結構、Markel樹等),進一步提供資料的防篡改能力。這一層面,主要是針對機構(toB)應用的許可型區塊鏈(Permissioned-Blockchain),或者簡稱許可鏈。

第五層,密碼學代幣。這個層面,主要是針對公眾業務的非許可型區塊鏈(Permissionless-Blockchain),又稱公有鏈。由於公有鏈沒有任何許可限制,人人都可參與,那麼,如何確保公有鏈的健康運轉呢?一般來說,技術解決不了的事情,可以讓經濟學來解決。所以,中本聰在這裡創新性的引入了博弈理論和經濟學原理,通過區塊鏈自帶的原生“密碼學代幣”進行適當的激勵,來保證區塊鏈的安全運轉。某種意義上說,公有鏈才是真正的非中心化區塊鏈。

我們發現,在第五層的時候,會產生了一種用於激勵機制的Token,在早些時候,它甚至被稱為密碼學貨幣(Crypto-currency)。剛才王行長也講了,這類密碼學貨幣,其實都不是真正意義上的貨幣。而且,一旦和人民幣緊密掛鉤的話,這裡面有非常大的法律風險。如果在這一層研究區塊鏈的人,就需要仔細研究各國的法律條文了,確保你的區塊鏈是合法、合規的。

六、區塊鏈的技術演進方向

1、技術演進的第一個方向,是雜湊演算法的創新,以抵禦專用礦機的攻擊。

早期的山寨幣,則主要就是在比特幣PoW共識的基礎上,通過將原來的SHA256雜湊演算法替換為其它雜湊演算法。例如以太坊採用的Ethash和萊特幣採用的Scrypt等雜湊演算法,都依賴較大記憶體進行計算,從而具備抵禦礦機、ASIC專業晶片的能力。而達世幣採用X11演算法,則是採用11中雜湊演算法進行串聯,其抵禦礦機能力更強。有了串聯就有並聯,一種叫Heavycoin山寨幣則採用了HVC演算法,將4中雜湊演算法進行並聯,從而具備較強的抵禦碰撞攻擊的能力。

但這類創新相對較小,抵禦專用礦機的能力也很有限。比如,達世幣,在位元大陸生產出針對達世幣的專用礦機“螞蟻礦機D3”之後,幣值一瀉千里。

2、技術演進的第二個方向,是資料結構的創新。

隨著比特幣系統後來暴露出來的效能不足和容量不足的問題,有產生了很多創新。

最簡單的,就是修改區塊引數直接擴容。

後來,則是針對賬本區塊內部結構的創新。比特幣可以被視為是一種面向UTXO交易的區塊鏈,同樣,我們還可以定義只存雜湊指紋的面向存證的區塊鏈、只存數字簽名的面向確權的區塊鏈、儲存要素資訊的面向登記的區塊鏈,還有面向K-V結構的區塊鏈等等。

另外,針對賬本區塊之間結構的創新。比如不再是鏈條,還可以由多個區塊組成區塊樹、由多個區塊組成區塊圖等等。

3、技術演進的第三個方向,是共識演算法的創新。

最近一兩年創新比較多的地方就是拜占庭容錯共識演算法。主要有兩大類,一是確定性一致性演算法,如基於投票機制的PBFT、RBFT、CBFT等。二是大概率一致性演算法,包括基於算力證明的PoW共識和基於權益證明的PoS。

但上述共識演算法都有其不足。

(1)BFT類共識,主要是支援的共識節點有效,強烈依賴網路質量,一點頻寬不足或網速抖動,會導致共識效率急劇下降,甚至無法形成共識。

(2)PoW類共識,導致高能耗,既不環保也不經濟。而且是不具備確定性,容易受到51%算力攻擊。

(3)PoS類共識,則非常依賴原生代幣所產生的權益賬戶,其安全性也很難進行形式化證明。

單一的共識機制,在一些要求較高的場景下使用,比如法定數字貨幣場景。所以,後來有衍生出來一些新的共識機制,將多種共識混合使用。簡單來說,就是將共識分為多個階段,每個階段採用不同的共識機制。

4、技術演進的第四個方向,是隱私保護的創新。

傳統的公有鏈模式這方面要求較低,只是通過簡單匿名實現很有限的隱私保護。

但在一些聯盟鏈的場景,尤其是toB的應用場景,這個需求非常強烈。一般來說,可以和傳統軟體一樣,從網路層、應用層或者是交易層各方面來做。網路層和應用層不用多說,至於交易層的很多解決方式,就是把傳統的密碼學的體系引入進來,包括環簽名、零知識證明、同態加密等等,這些理論和演算法,就算在密碼學的學術界也屬於比較前沿性的,有些在在理論上已經成熟了,但很多在工程上還不可行,或者導致資料膨脹太厲害,或者效能下降太多,難以在實際區塊鏈系統中大規模運用。

總的來說,區塊鏈還處於早期階段,尤其是toB的區塊鏈,在可擴充套件性、節點儲存、隱私保護等方面還很受限;另外,其共識演算法安全性難以證明,智慧合約安全性難以驗證、量子計算的攻擊難以抵禦;最後,缺乏好的開發工具、缺乏相關治理和標準,其升級和演化機制也不成熟。

但與此同時,這方面的創新,一直在進行。一般來說,工程上的問題總是能解決的,只是時間早晚而已,區塊鏈的未來還是很值得期待的。