一文了解區塊鏈的基礎知識和常見用例

關鍵要點

  • 區塊鏈可以是公共的,也可以是私有的,可以是有許可的,也可以是無信任的。

  • IBM Hyperledger和R3 Corda是兩種使用最廣泛的企業區塊鏈。

  • 部署真實的解決方案仍然帶有侷限性和不完善。

  • 這個領域還處於早期階段,並正在不斷演化。

  • 企業採用區塊鏈仍然需要謹慎。

要想梳理一遍區塊鏈領域,可能是一件非常具有挑戰性的事情。

已經有大量關於這個主題的文章,其中很多充斥着炒作、專業的技術和其他術語。

在本文中,我們將解釋區塊鏈項目(公共和私有)兩個主要分支之間的差異以及與該領域相關的一些基本技術術語。

我們將藉機解答當前關於區塊鏈和相關解決方案的一個基本問題:公共無信任區塊鏈、分佈式私有分類賬和傳統數據庫的有效使用場景分別是什麼?

區塊鏈領域中出現的一些最重要的術語:

  • 受信任的第三方——需要通過引用特權(通常是集中的)權限,否則無法驗證某些事實(例如參與者的身份)的系統。

  • 無信任——任何操作(包括交易確認或身份驗證)都不依賴可信第三方的系統。

  • 工作證明(POW)——爲數學難題(通常是散列問題)找到解決方案,這些難題通常沒有解決捷徑,必須通過強大的算力來解決。

  • 未使用的事務輸出(UTXO)——在某些區塊鏈(例如比特幣)中,事務需要使用輸入,並留下一些未使用輸出。然後,這些未使用的輸出可用作未來交易的輸入。

  • 虛擬機模型——一些區塊鏈(特別是以太坊)有一個抽象模型,說明了如何表示系統的整體狀態,以及如何更新其狀態。這個模型通常可以通過虛擬狀態機的正式模型來描述,例如以太坊虛擬機(EVM)。

  • 智能合約——一個小型的、基於事件驅動的程序,可以部署到支持執行程序的區塊鏈中。部署後,程序將繼續執行,使用區塊鏈事務作爲輸入,並做出一些操作,這些操作可導致進一步執行事務。這些程序的代碼受加密方式的保護。

  • 圖靈完備——一個計算機科學術語,可以被理解爲“全能的編程語言”。所有主流語言,如Java、JavaScript、Python、Ruby、Go等都是圖靈完備的。由於技術方面的原因,一些區塊鏈可能不會爲智能合約開發者提供圖靈完整語言的全部功能。

關於這些術語,還有很多更詳細的細節,其中最重要的一些方面包括:

  • 大多數交易系統完全或部分依賴於某些受信任的第三方。另一方面,無信任是一種非常了不起的特性,但它並不是可以廉價獲得的——實現無信任的系統需要額外的努力,而且必定伴隨着額外的複雜性。這裏的關鍵是很多區塊鏈都在使用的共識POW算法。

  • 一旦找到POW問題的解決方案(主要是通過大規模的反覆試驗),任何參與者都可以立即證明解決方案的正確性。好的POW問題具有統計特性,允許任何觀察者可靠地估計在解決方案中消耗了多少計算時間。它們因此適合作爲公共區塊鏈(例如比特幣)的分佈式共識機制。

  • UTXO模型提供了一個簡單的路徑來確保事務完整性,並防止在兩個單獨的事務中使用相同的比特幣兩次(“雙花問題”)。這是通過確保任何事務的輸入必須出現在輸出集合中——UTXO數據庫來實現的。

  • 相反,虛擬機模型(特別是由以太坊實現)提供了更重大的擴展——能夠以無信任且完全分散的方式存儲任意狀態和在網絡內運行簡單的程序。

在闡明這些主要定義(以及一些後果)後,現在可以看一下目前使用的一些主要的基於區塊鏈的技術。

比特幣

最原始的加密貨幣,它使用未使用的事務輸出(UTXO)模型作爲分類帳。它使用簡單的POW算法猜測隨機字符串,這個字符串與最後一個事務區塊組合的SHA-256哈希值在數值上應該小於一個小的閾值。

成功猜到答案的參與者等於是“挖到了一個區塊”,並且該區塊中包含的交易被添加到分類帳中。

這樣可以形成一種非常簡單的確定共識的方法——參與者只需同意最長鏈應被視爲挖掘下一個交易區塊的基礎。

比特幣不是爲了智能合約而設計的。因此,可用的功能非常有限,由此產生的功能絕對不是圖靈完備的,而是比特幣的大多數分析都會忽略它。

因此,最終的系統純粹是安全加密的分類帳。

除了使用加密簽名來驗證交易的來源之外,它沒有身份語義,並且是完全無信任的。

以太坊

這個分類帳也是基於比特幣的一些想法,但模擬了單個全局虛擬機的狀態,而不是使用UTXO模型。以太坊的關鍵創新是增加了圖靈完備的智能合約能力。以太坊虛擬機(EVM)——一種專門用於在具有智能合約的分佈式賬本環境中使用的虛擬機。

在以太坊中,程序狀態是私有的,屬於單個合約地址,並且通過一系列EVM字節碼指令進行修改,這些指令就是智能合約的內容。

然後,通過聚合每個合約地址的程序狀態來得到整體的全局狀態。

以太坊網絡中所有完整的節點都遵循這個模型規則。它們可以在自己的機器上爲任意合約地址狀態計算系統狀態,只要它們使用了相同的交易(構成以太坊模型中的輸入數據),就會得到相同的結果。

由於以太坊使用了全局一致性算法,並且具有全局最新區塊的概念,因此以太坊虛擬機的總體交易處理速率受區塊生成速率的限制。爲以太坊網絡添加更多硬件和計算能力並不能使其更快或更強大,只是增強了防篡改性。

使用圖靈完備的智能合約可以在網絡上添加額外的功能,而不需要所有參與者都知道它們。例如,以太坊網絡因此可以發佈在以太坊虛擬機中作爲附加狀態的軟件代幣。這構成了所謂的初始數字貨幣發行(Initial Coin Offering,ICO)的基礎。

從表面上看,EVM類似於JVM和其他類似的環境,但在一些重要方面進行了不同的設計。特別是EVM字節碼的設計使得對編譯代碼的靜態分析變得更加困難。對於需要高度透明性和可驗證性的執行環境而言,這並不是一個賣點。

底層EVM環境也不是特別人性化的編程環境,所以出現了一些可以編譯爲EVM字節碼的高級語言。其中,最著名的是Solidity。

受更多主流編程語言(如JavaScript和Java)的啓發,Solidity語言還融入了可以與以太坊區塊鏈發生交互的新特性。

從某種程度上說,以太坊是其自身成功的犧牲品。它作爲ICO的首選平臺導致了2018年初ETH(以太坊代幣)的價格走高。因爲以太坊團隊本身擁有大量的這種加密貨幣,導致了很多主要參與者對既得利益的極大興趣,並希望能夠將其變現。

Corda

R3 Corda使用了UTXO模型(與比特幣一樣),但也將圖靈完全的智能合約作爲設計的一部分。這些合約表示爲JVM字節碼,附帶了可選的用於限制合約語義的確定性保證。

這個方法不使用單個全局鎖來控制分類帳狀態的提升,而是允許執行不衝突的事務。這讓鎖定變得更加細粒,代價是需要更復雜和更微妙的時間和時鐘概念。在Corda模型中——簡單的“最長鏈者贏”規則不再適合作爲一致性算法。

參與者是可知的而被信任的,因爲第三方身份驗證是Corda架構的組成部分。

因爲致力於消除全局分類賬鎖,Corda提供了退出/進入語義,用於解開主鏈中的交易,並防止所有交易隨着時間的推移纏繞在一起。這是有可能發生的,因爲該架構強烈依賴於受信任的第三方模型。

因此,某些參與者撤銷分類賬項目並將其替換爲沒有交易歷史記錄的等價物的權力可以得到身份當局的保證。

Corda的創建者並不認爲它與加密貨幣類似。

相反,他們認爲這項技術是整個市場層面(而不是單個公司)共享基礎設施的基礎。

這使得Corda成爲企業可以從公共基礎設施和世界狀態共享視圖中受益的企業區塊鏈,不需要維護單獨的記錄版本,因爲這樣不可避免地需要進行協調。

HyperLedger

由IBM發起的HyperLedger項目是另一個領先的企業區塊鏈解決方案。

Hyperledger Fabric是一個區塊鏈框架實現,是Linux基金會託管的Hyperledger項目之一。

IBM對該項目的主要設計目標包括機密性、彈性、靈活性和可擴展性。

與Corda一樣,Hyperledger使用了許可架構。

它實現了確定性拜占庭容錯(Practical Byzantine Faul Tolerant,PBFT)算法,該算法可以確保一旦收到交易完成通知,交易就真的完成了。

IBM已經在與Docker的集成上進行了大量投入,包括在容器內測試。

Hyperledger的智能合約可以用Java編寫,並提供了專門的SDK(使用Go語言編寫合約也是有可能的)。

Hyperledger按照角色來分隔節點,這些節點包括完整的對等方、證書頒發機構節點(權限所需)和將交易分組爲區塊的開證申請人。

Hyperledger區塊鏈狀態被建模爲版本化鍵值存儲(KVS),其中鍵是名稱(字符串),值是任意的二進制對象。

這是一個非常底層的接口,Hyperledger在其上面提供了一個叫作Ledger的層,它爲所有的成功狀態變更提供了可驗證的歷史記錄。

Hyperledger的代碼和架構仍在快速演化,實際的生產環境試驗也開始出現了,並且它與Corda一起成爲更可能被企業使用的解決方案之一。

用例

區塊鏈的使用案例仍存在激烈的爭議。

抗審查數字貨幣就是一個非常明顯的例子。

不過,2018年加密貨幣市場的波動性和分散性似乎表明,無信任數字貨幣的實際適用性非常有限。

從企業的角度來看,很明顯它們也可以用於創建系統或網絡,這些系統或網絡作爲多個實體之間的共享構造,這些實體不一定相互信任,但希望共享數據並對所有各方都關心的問題保持某種共識。

這類集中授權對於參與者來說是不可接受的或者設置成本太高的用例仍然在出現。

2019年,隨着越來越多的項目進入市場,區塊鏈是否能夠像其倡導者已經承諾的那樣帶來長遠的重大影響還有待觀察。

關於作者

Ben Evans是JVM性能優化公司jClarity的聯合創始人。他是LJC(倫敦JUG)的組織者,也是JCP執行委員會成員,幫助定義Java生態系統的標準。Ben是Java Champion,3次獲得“JavaOne Rockstar Speaker”,“The Well-Grounded Java Developer”、新版“Java in a Nutshell”和“Optimizing Java”的作者。他是Java平臺、性能、架構、併發、初創公司和相關主題的演講常客。

查看英文原文:

https://www.infoq.com/articles/blockchain-basics-use-cases

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章