擁抱區塊鏈技術,為什麼首先需要摒棄「名詞之爭」?

作者: 冒志鴻(ArcBlock 執行長、首席架構師)
「名詞之爭」
第一次瞭解「名詞之爭」這個概念,我是在 2018 年初參加甲子光年主辦的區塊鏈大會上。甲子光年創辦人甲小姐在開場演講中引用了胡適先生的這段文字作為開場——要真正理解和擁抱區塊鏈技術,需要首先摒棄「名詞之爭」,透過現象看本質。

胡適先生在 1935 年 5 月 12 日《獨立評論》第 150 號上發表過一篇文章《充分世界化和全盤西化》,開頭就說到:
二十年前,美國《展望周報》(The Outlook) 總編輯阿博特 (Lyman Abbott) 發表了一部自傳,其第一篇裡記他父親的談話,說:「自古以來,凡哲學上和神學上的爭論,十分之九都只是名詞上的爭論。」阿博特在這句話的後面加上了一句評論,他說:「我父親的話是不錯的。但我年紀越大,越感覺到他老人家的算術還有點小錯。其實剩下的那十分之一,也還只是名詞上的爭論。」
算下來,1935 年,也就是 85 年前胡適先生寫了這篇文章,而其中引用了距那時 20 年前的觀點,也就是這是 100 多年前的觀點了。直到今天,每每出現新的技術、新鮮事物,「名詞之爭」還是常常會出現。由於區塊鏈技術仍處於早期,整個行業和大眾在一些觀點上尚未達成共識,經常會產生「名詞之爭」。
破除迷思,深入瞭解區塊鏈的能力與局限
我和陳俊寫了這本《區塊鏈實戰:從技術創新到商業模式》專門開闢了四章的篇幅,來分析區塊鏈技術的能力和局限,對很多技術、概念進行了辨析,就是希望能幫助讀者更多透過現象看本質,從「名詞之爭」中走出來。

第 6 章:對區塊鏈的常見誤解(摘)
作為區塊鏈技術先行者,我和我的團隊過去兩年多在全世界各地進行演講佈道,參加了為數眾多的學術、技術和商業會議,加入了多個技術和行業組織。在我們的分享溝通中,發現對區塊鏈的各種誤解普遍存在,那些身處區塊鏈行業的個人和機構,也難以避免。這些誤解有的是對區塊鏈概念望文生義,有的可能是受一些早期文章過時觀點的誤導,也有受業內少數基本教義派者刻舟求劍般的觀點影響,還有某些區塊鏈項目炒作誇大甚至不實宣傳也遮蔽了對區塊鏈的正確認知。
誤解一:區塊鏈上的數據是不可竄改的。區塊鏈上的數據有很強的防竄改能力,但並非絕對不可能被竄改。很多公鏈會明確聲稱自己的帳本是不可竄改的,然而嚴格意義上來說,這種說法不完全正確。一個去中心化程度高的公鏈,的確具有非常強的防數據竄改能力,可以用在不少需要數據防竄改的場景下。
一些區塊鏈,如比特幣、乙太坊都可能在鏈的最「尾部」的區塊偶爾出現被系統撤回的情況,這是它們的共識演算法導致的正常現象。只有在區塊到達「最終確定狀態」(Finality)時,才能認為這些數據已經相當難以被竄改,而在到達最終確定狀態之前,都存在數據修改的可能性。

誤解二:數據上鏈後,數據永遠不會丟失。和誤解一相同,有人認為數據上了鏈就再也不會丟失而獲得「永生」了,這也是片面理解。因其分散式設計,區塊鏈網路創建許多備份,所有備份都點對點更新並同步相同的數據。區塊鏈技術的一個好處是每個用戶都可以維護自己的數據副本。每當新的完整節點加入網路時,它們會接觸發現其他完整節點並請求區塊鏈網路數據的完整副本,這使得數據的丟失或破壞變得困難。
然而,區塊鏈本身不能被認為是完全不可變的。The DAO 事件的結果是乙太坊數據回滾,即回滾到丟失 ETH 之前的數據,所以區塊鏈項目並不存在絕對的數據永不丟失。另外,還可能區塊鏈網路被攻擊,在 PoW 共識系統中,攻擊者只需獲得足夠的資源來超過區塊鏈網路其餘部分的區塊創建速度(持有超過 50% 的資源用於生成新區塊),即可發起攻擊,只不過代價可能非常高昂。
誤解三:區塊鏈是去中心化的,因此不可能被關閉或審查。類似前面一些誤解,尤其那些持有無政府主義觀點的人們在誇大區塊鏈能力的操作中會認為由於區塊鏈的去中心化特性,讓區塊鏈不可能被封鎖、關閉,甚至認為這是可以用來抗衡政府及執法部門的技術,其實這也是一種片面的理解。
首先,對於處於小規模測試階段的公鏈或聯盟鏈,只要其運行的全部節點被關閉,無論出於什麼原因,那麼這些區塊鏈就消失了;其次,區塊鏈是一種網路應用,如果某個地區的網路被完全切斷,或者通過技術手段阻攔某些網路通訊,即使整個區塊鏈網路沒有被關閉,但對這個地區而言其實已經被關閉了。因此,如果出現極端情況,即使是去中心化程度很高的公鏈也不能排除局部甚至整體被關閉的可能性。
誤解四:只要採用區塊鏈技術,系統必然會安全程度更高。事實上,這些年來區塊鏈網路系統被攻擊、數位資產被盜等安全事故層出不窮。僅 2019 年,幾乎每個月都有較大的安全事件爆發,價值超數百億元的鏈上資產被駭客或作惡者以不同的方式竊取,主要類型包括公鏈底層程式碼缺陷、智能合約程式碼缺陷、私鑰被竊、攜款逃跑等。僅智能合約漏洞事件,據媒體報導,2019 年就發生超百起,總損失超 1000 萬美元。
作為去中心化系統,區塊鏈有許多天生的優勢,但區塊鏈系統始終是需要網路運行的系統,因此傳統的網路安全策略和防攻擊手段在區塊鏈系統中同樣必不可少。電腦系統的安全性其實取決於系統本身的安全性設計,和具體使用某種技術並無必然聯繫。因此,當你聽到「因為採用了區塊鏈技術,因此我們的方案更安全」這樣的說法的時候,需要格外警惕。
誤解五:區塊鏈必須要挖礦,礦工越多區塊鏈越安全。「挖礦」概念是從比特幣使用的工作量證明(PoW)共識機制演變而來的。挖礦的抽象意義其實就是節點對區塊鏈網路的貢獻,如果用戶並沒有為系統做出任何貢獻的話,挖礦只是製造虛假參與感的噱頭。
事實上,區塊鏈技術的使用並沒有消除固有的網路安全風險,仍然需要深思熟慮和積極主動的風險管理。其中許多固有風險涉及人為因素,比如如果用戶丟失私鑰,則與該金鑰相關聯的任何數位資產都將丟失,因為重新生成相同的私鑰在計算上是不可行的。如果私鑰被盜,攻擊者將可以完全訪問由該私鑰控制的所有數位資產。因此,強大的網路安全計劃對於保護網路和參與組織免受網路威脅至關重要,特別當駭客擁有更多關於區塊鏈網路及其漏洞的知識的時候。
誤解六:區塊鏈讓用戶自己保管私鑰,因此更安全。現在的區塊鏈系統建基於加密演算法和簽名演算法,已經使用區塊鏈的用戶都知道「私鑰」的重要性。由用戶自己控制私鑰的方式和傳統網際網路的用戶帳號密碼的方式有很大不同,由於近年來網際網路帳號被盜的事件頻發,有人認為用戶自己控制私鑰方式的系統會更安全,實際上這也是一種誤解。
從安全角度而言,兩種方式各有利弊。用戶自己控制私鑰方式的明顯好處就是系統被攻擊或者從系統內部來攻擊的難度加大了,但問題是用戶從此多了很多私鑰要自己管理的煩惱,而且私鑰一旦洩漏是無法修改的,甚至明知已經洩漏也無法阻止攻擊、挽回損失。另外,如果私鑰丟失,系統營運者也無法為用戶找回資產。相比之下,傳統 IT 系統在這方面有更好的用戶體驗,用戶保管私鑰沒有這麼大的心理壓力。還有很多密碼管理的實踐,例如定期滾動管理用戶密碼(每隔一段時間系統要求用戶必須修改密碼防止洩漏),用戶擔心密碼有洩漏可能可以主動更換密碼轉移帳號等。這些安全實踐在今天大部分區塊鏈系統上目前都還沒有辦法實現。
誤解七:區塊鏈上的智能合約是不受操控的,因此更安全、公平、可靠。「智能」合約的「智能」之處在於由電腦程式碼評估和執行,無需第三方介入,實現了去信任化的合同自動執行。智能合約會執行及時和客觀發生的事情,而不是指望另一方兌現承諾,但真正的智能合約卻很難形成。因為真正智能的合約需要考慮到所有情況。換言之,要求合約無需信任,意味著合約完全不能有任何模稜兩可的空間。
The DAO 的資金安全事件導致了人們對乙太坊智能合約以及其宣傳的「程式碼即法律」的質疑,有人認為這個從 The DAO 錢包持續提取 ETH 的人是攻擊者,而這個行為屬於盜竊,而另有人認為,這從某種意義來說,只不過是找到了一種以違背編寫者意圖但完全合法使用程式碼獲益的方式,如果「程式碼即法律」則無可厚非。此事發生之後,乙太坊開發者對乙太坊進行了回滾產生了硬分叉,引發了更大的爭議並直接導致乙太坊社群分裂為兩大群體。
誤解八:採用區塊鏈,用戶的隱私問題就得到解決。除了少數專注於隱私需求的區塊鏈技術,包括比特幣在內的大部分區塊鏈並不實現真正的匿名。區塊鏈上的數據基本完全公開,也就是每筆交易都能清晰地瞭解相關的帳號及其資金往來,即使不知道某個帳號背後對應的是誰,但這個帳號在區塊鏈上的一舉一動,都是透明公開,而且難以竄改。相比之下,傳統網際網路的業務數據往往不是全公開的,出現隱私問題常常是因為某些網際網路企業出售或洩漏了含有用戶隱私的數據。
區塊鏈存在「隱私」的地方是區塊鏈的帳號和它背後的真實用戶身份在區塊鏈上不存在對應關係。由於區塊鏈的「自主帳號」不需要向任何人或機構申請,因此沒有任何資訊能將這些帳號與個人資訊關聯起來。另外,很難從採用 P2P 通信方式的區塊鏈本身的記錄裡發現使用者的網路 IP 地址等傳統網際網路用戶定位方法。從這個角度來看,區塊鏈的匿名性的確比網際網路應用要更好,因為區塊鏈上雖然交易資訊全公開,但畢竟沒有任何敏感的個人資訊,自然不存在洩漏的問題。
誤解九:區塊鏈能控制用戶的數據,不被非授權使用。區塊鏈技術可用於更好地控制用戶數據的訪問範圍和記錄產生可審計的數據訪問報告,但是區塊鏈本身並不能控制被授權方濫用這些已授權數據。徹底解決用戶隱私和數據濫用問題,仍然需要法律法規的支持配合。
誤解十:量子運算實現後,區塊鏈就不再有意義了。量子電腦並非遙不可及,一般認為在 10 到 20 年內,量子運算就能投入實用。量子電腦的計算並行這一特性意味著,隨著量子位元數的增加,其計算能力以指數級別增加。量子電腦可能會改變目前區塊鏈挖礦行業,擁有量子運算能力的挖礦速度會高於現在的礦機,更利於解決雜湊函數(Hash function)的運算。
需要說明的是,目前量子運算技術還處於非常早期的階段,據一篇標題頗為聳人聽聞的文章《量子電腦能在 8 小時內破解 2048 位元 RSA 加密》指出,據有關專家估算,使用量子運算破解 2048 位元的 RSA,考慮到必要的糾錯等因素,量子電腦需要的量子位元約需要 10 億個。IBM 在 2020 年公開展出的量子電腦 IBM Q System One 僅僅有 20 個量子位元,而目前報導的最大量子位元 Google 量子電腦也就是 57 個量子位元。也就是說量子運算技術還需要很長時間的發展才有可能撼動現代加密演算法的基礎。
因此,面對仍處於技術早期階段的區塊鏈,我們應該以「區塊鏈技術如何使我們受益」的思維方式來思考和應用,而不是一味糾結於「如何才能使應用融入區塊鏈技術範式」。應該像對待其他任何新技術一樣,來準確深入地理解區塊鏈技術的能力和局限,並在適當的情況下採用它。在下面其他章節,我們選擇了幾個對區塊鏈技術常見且重要的誤解和迷思,請讀者和我們一起撥雲見日,逐步揭開區塊鏈技術的本質。
第 7 章:關於加密貨幣、加密資產和通證的誤解(摘)
毋庸諱言,這幾年來以比特幣為主的各種加密資產及其帶來的財富效應,才是吸引全世界的普通大眾關注瞭解區塊鏈技術的最大動力,在此之前可能還從未有任何一種電腦技術讓如此多的行外人士如此著迷。
誤解一:區塊鏈就是比特幣或數位貨幣。這是一種對區塊鏈技術缺乏基本認識的典型誤解。比特幣、各種加密數位貨幣只是區塊鏈的一種應用,而區塊鏈支持很多種其他的應用。
誤解二:區塊鏈的作用就是用來「發幣」。與誤解一類似,區塊鏈除了用於「發幣」、發通證之外有很多種用途。「發幣」的說法常來自炒作加密貨幣時代的產物。
誤解三:「幣」或「通證」除了用於炒作沒有別的作用。「通證」有相當多的用途,非常廣泛的應用場景,絕大部分區塊鏈應用的設計都離不開使用某種形式的通證,即使這些應用不需要使用虛擬貨幣。加密貨幣交易雖然在過去可能是加密貨幣的主要用途,但已經有越來越多的實用項目採用區塊鏈和通證技術。
誤解四:政府要發國家數位貨幣就必須使用區塊鏈。這也是一種誤解,設計和實現一個 Token 並非需要區塊鏈不可,完全可以不採用區塊鏈技術。不過在技術發展的今天,採用區塊鏈是一個比較有利的選擇。
誤解五:企業政府必須使用「無幣區塊鏈」。「無幣區塊鏈」是一種「名詞之爭」,是一些人用於把「區塊鏈技術」和「幣」劃清界限而炮製的一種不科學的說法,誤導性較強。某種角度而言,幾乎不太存在無幣(通證)的區塊鏈應用場景。「無幣區塊鏈」就好比是「無數據的資料庫」一樣荒唐可笑。
第 8 章:對智能合約和虛擬機的誤解(摘)
對很多具有電腦技術背景的人來說,「智能合約」可能是區塊鏈技術裡最感興趣的部分。顧名思義,「智能合約」給人以無限的應用遐想。過去幾年,可以說「智能合約」是我接觸到的區塊鏈領域裡最容易打動客戶的理念,然而不幸的是,這往往也是客戶最容易誤解的概念。「智能合約」有著無限的可能性,但在今天的實現程度上還有著很多局限,正確認識智能合約的能與不能、現狀和未來,有助於我們思考和決策在自己的業務系統中應該如何定位和使用智能合約。
「智能合約」的聲名鵲起主要得益於乙太坊的成功,而乙太坊是用虛擬機的方式來實現其智能合約的,這同時也導致了很多人認為乙太坊的實現方式是唯一方式,從而引發了對區塊鏈虛擬機的各種誤解。
誤解一:區塊鏈必須支持智能合約。區塊鏈技術和智能合約的結合是非常好的形式,區塊鏈具有去中心化、難以竄改、透明可追蹤等優點,天然適合於智能合約。智能合約的確是一個令人激動的特性,也因為區塊鏈的普及而名聲大噪。然而,智能合約與區塊鏈是兩個相互獨立的概念,並不互相依存,區塊鏈本身未必需要支持智能合約,也並非所有的應用場合都需要智能合約。
誤解二:區塊鏈應用就是智能合約自身。這一誤解可能來自乙太坊「下一代智能合約與去中心化應用的平台」這一定位宣傳過於成功,讓很多人在智能合約和應用之間劃上了等號。如果真正瞭解智能合約,就會發現智能合約其實只是一個區塊鏈應用中的一小部分,要構建一個讓最終用戶能夠完整體驗的應用,光靠智能合約本身通常是不夠的,還需要其他業務邏輯、介面邏輯等的支持。
誤解三:智能合約必須就是程式碼。乙太坊的智能合約概念成功讓很多人以為智能合約就必須是程式碼,但實際上這是一種誤解。乙太坊的智能合約引入程序性程式碼的設計方式,有很強的靈活性,但導致這種智能合約在使用起來只能由軟體工程師來完成。其實智能合約的實現可以有多種方式,把智能合約用程式碼來定義,只是一種方式。未來一定會出現更多種智能合約的形態,例如表格方式、規則描述方式、視覺化方式。
誤解四:智能合約實現必須實現專用的語言。很多區塊鏈項目都為自己的智能合約設計了新語言,例如乙太坊使用的 Solidity,Facebook 的 Libra 設計了 Move 這種專門的智能合約語言。那麼是否實現專用的新智能合約語言就更好呢?我覺得這很可能是一種不好的風氣,大部分新的程式設計語言並無必要,而且在今天的電腦科學基礎上設計實現一門新語言本身並非難事,但要設計一個優秀的新語言則難上加難。很多區塊鏈項目可能只是處於市場宣傳或炫技而設計新語言。
未經時間考驗的語言,可能存在不完善,例如乙太坊智能合約暴露的安全問題,也反映出以 Solidity 作為新語言設計上的不夠完善。某些新語言並不能帶來功能實現上的超越,反倒不如經歷過很長時間很多優化的經典語言更加安全有效。
目前有不少區塊鏈採用基於 WebAssembly(縮寫 WASM)的虛擬機來實現智能合約。在 WASM 生態裡,結合 LLVM 這樣的可以把實現語言和目標編譯程式碼解耦合的成熟技術,理論上未來可以用任何語言來進行開發。
誤解五:智能合約必須「圖靈完備」。乙太坊的智能合約是圖靈完備的,這一直是乙太坊宣傳的一個重要賣點,但並非所有的區塊鏈智能合約都需要是圖靈完備的。但智能合約完全可以多樣化,例如比特幣腳本特意設計成非圖靈完備。圖靈完備與否只是一種設計需要,並不代表其優劣。我相信會有越來越多的區塊鏈會考慮實現非圖靈完備的面向領域語言(Domain Specific Language,縮寫 DSL)來實現高效率、安全的智能合約開發。
誤解六:支持智能合約必須使用虛擬機。認為支持智能合約的區塊鏈必須要有虛擬機,這也是乙太坊風靡之後產生的誤解。區塊鏈的共識機制要求所有參與者計算結果保持一致,但是各節點可能會因為各種原因輸出不同的結果。乙太坊為了讓所有節點保持一致寫了一個虛擬機,就是為了實現智能合約程式碼的一致性,並讓乙太坊的智能合約在這個容器裡面運行。然而,理論上虛擬機並不是支持區塊鏈運行智能合約的必要條件。

區塊鏈的智能合約需要在一個資源隔離的環境運行,但是這個環境不侷限於虛擬機。只要達到一個沙盒執行環境標準(可以通過命名空間的隔離),保證合約和合約之間、合約和宿主系統之間進行了有效的資源隔離就可以實現。而智能合約是用戶編寫的,需要防備惡意或故障智能合約的不良影響。
第 9 章:對雲端運算和區塊鏈關係的誤解(摘)
在過去幾年裡,我經常會遇到一些自稱「比特幣經驗深厚」的人聲稱區塊鏈與雲端運算是截然對立的;認為區塊鏈使用了雲端運算會變成中心化應用;甚至由於比特幣的礦機、礦場無法基於雲端運算服務來部署,就認為雲端運算不適用於區塊鏈。然而,最近幾年,雲端運算廠商開始積極擁抱區塊鏈,它們大部分所支持的區塊鏈多為適用於企業的聯盟鏈或私鏈,因此,常會聽到來自「公鏈」們的批評。各種交錯的不同聲音有時會讓人困惑,到底區塊鏈和雲端運算技術是什麼樣的關係?是矛盾對立還是相輔相成?
誤解一:用雲端運算搭建的就不是真正的區塊鏈。這一錯誤認知最初來自於例如比特幣等 PoW 挖礦無法利用雲端運算的情況,但在本章我們介紹了雲端運算服務對區塊鏈部署提供的價值,而且事實上目前有數以千萬計的區塊鏈節點和應用都部署在雲端運算之上。
過往的區塊鏈項目,因為雲端運算的技術和產品發展尚未達到現有的發達和豐富,往往是項目設計之初,並沒有考慮到與雲端運算的結合,又可能是共識演算法的局限,也無法利用雲端運算服務的便利與高效。新一代的區塊鏈項目設計者,已經意識到雲端運算對區塊鏈項目大有裨益,無論從底層設計和共識演算法角度出發,無論是從安全性還是穩定性來說,都會更多考量利用雲端運算服務,目前有越來越多的區塊鏈項目支持雲端運算部署,我們相信這是一種趨勢。
誤解二:使用了雲端運算的區塊鏈更為「中心化」。區塊鏈該不該使用雲端運算,其實這一考量與是否中心化並無關係。對於區塊鏈使用雲端運算會變得中心化的誤解,主要是來自於認為部署在雲端運算的區塊鏈項目就受制於中心化的雲端運算廠商這種看法,但這種看法顯然十分偏頗。因為事實上任何一個項目就算不部署在雲端運算平台上,也需要部署並受制於其他廠商的平台,而根據一般經驗,普通機房比大型雲端運算服務企業的風險顯然要大得多。
誤解三:雲端運算廠商出於商業目的能讓區塊鏈服務變得更中心化。這種擔心有一定的道理,雲端運算廠商作為商業機構當然希望把客戶更牢地「鎖定」在自己平台上,但恰恰區塊鏈本身的去中心特點使得雲端運算廠商更難把區塊鏈佔為己有。
去中心化應用往往更多是一種「協定」,也就是要求應用可能會被多方部署在多個不同環境,只是因為採用相同的「協定」,或者基於相同的區塊鏈才能一起協作。在這種思路下,應用的開發者會更不容易被「雲端鎖定」。
目前,雲端運算服務商被人詬病的問題集中於「雲端鎖定」,如應用一旦使用了某個雲端平台上很多「進階效能」,就產生了「依賴性」,難以切換到別的雲端上。區塊鏈從軟體架構設計角度來看,有時候像一種軟體連接器(Software Connector)或者軟體匯流排(Software Bus)的位置,能提供一種跨越雲端的高層協定,因此更難被「雲端鎖定」。
本頁涉及
術語
-
區塊鏈
透過密碼學連接記錄,並按共同的驗證與共識規則確定交易歷史的分散式帳本。