區塊鏈技術的精華:四十種智能合約支持平臺(一)

摘要: 智能合約是以數字形式定義的承諾,控制數字資產並涵蓋合約參與者約定的權利和義務。它由計算機系統自動執行。在基於區塊鏈的智能合約中,數據管理、事務驗證和狀態處理都是在區塊鏈上完成的,區塊鏈提供完備的狀態機接受和處理各種智能合約程序。我們在此係統列舉四十種支持或是用於開發智能合約的平臺或項目,並介紹影響智能合約功能的主要因素。本文是該系列文章的第一篇,給出了其中10種支持平臺,包括著名的ETH、RSK和Zen等。

正文

大家已經看到,區塊鏈正在改變我們的世界。

區塊鏈解決了人類一直面對的一個重大問題,信任問題。區塊鏈可爲任何需信任的事物創建一種不可更改的追溯印跡,由此解決信任的問題。

當然,該技術的強大還不止於此。

它在上述特性上繼續擴展,用以創建一經制定就必須準守的規則,其中的每個行爲都會產生相應的反應。其實,就是智能合約。

本文列出了四十種支持或是用於開發智能合約的平臺或項目,它們均在不斷的演進中。如果讀者發現本文存在任何遺漏或錯誤,希望能在評論中提出。此外,隨着本文作者對這些平臺或項目的進一步研究,本文內容將會定期更新。

原文提供在Github上,讀者可以拉取下來提出修改建議。

附: 本文對智能合約平臺/項目的評估,主要考慮的是影響智能合約功能的一些因素,而不是整體功能評估。

這篇文章花費了原作者數天時間才完成。如果讀者喜歡閱讀此類內容,想表達感謝和支持,可在此處或下面的ETH地址請作者喝杯咖啡:

           a93e64a691d5aff8f78cd63130cf23b89182d235

下面詳細列出四十種智能合約平臺/項目。本文是該系列文章的第一篇,給出了其中10種支持平臺,包括著名的ETH、RSK和Zen等。

1. 以太坊(Ethereum

優點:

  • 圖靈完備。
  • 擁有可能是規模最大的開發人員社區。
  • 最支持智能合約的平臺。

不足:

  • 它使用Solidity語言。與C++、C#、Python等現代開發語言相比,Solidity並不具有優勢。
  • 如果智能合約編寫的效率不高,那麼實現代價巨大。

智能合約語言:Solidity
現狀: 活躍。
說明:

以太坊是首批在區塊鏈中引入智能合約概念的平臺之一,並得到了開發者社區的最大支持。它宣稱實現了圖靈完備的智能合約平臺。合同代碼由每位以太坊網絡中的礦工在EVM(以太坊虛擬機)上執行。它是最廣爲使用的區塊鏈項目平臺。

圖片

儘管以太坊平臺可安全使用,但是其因用戶實現代價問題而備受批評。此外,以太坊平臺缺乏可擴展性,會導致交易速度不高,不適合當前的現實世界應用。

平臺使用Solidity語言。Solodity可以很好地實現圖靈完備,但是缺乏現代語言的靈活性,存在的問題包括:

  • 輸入和返回參數不支持多維數組(例如,字符串數組)。對此問題存在替代解決方案
  • 智能合約函數支持的參數數量有限(不能多於十六個)。否則會給出“stack too deep”錯誤。

上述問題表明,爲適應現代語言的靈活性,該智能合約語言依然需要進一步發展。
有資料列出了Solidity存在的62個問題
學習資源: CryptoZombies主頁Solidity官方文檔OpenZeppelin以太坊的Medium博客

2. Quorum

優點:

  • 圖靈完備。
  • 通過使用constellation,添加了支持網絡中兩個以上參與者間發送私有交易的特性,因此更適用於企業用戶。
  • 將瓦斯(GAS)價格降至零,但依然保持瓦斯限制。這樣Quorum在利用瓦斯限制所提供的安全特性的同時,將交易代價(即瓦斯價格*瓦斯限制)降至零。

不足:

  • 開發人員社區相對不大。
  • 因爲也使用Solidity作爲合約語言,因此具有和以太坊同樣的不足之處。

智能合約語言: Solidity
現狀: 活躍
說明:
簡而言之:

Quorum是以太坊智能合約平臺的一種版本,它提供免費的交易,並且還能夠使用constellation完成各參與方間的私有交易。

Quorum維護了兩個賬本,即公開的和私有的。公開賬本被公開交易修改,私有賬本只針對私有交易所涉及的各方,被私有交易修改。

圖片

Quorum與以太坊聯繫密切,它們使用同一核心平臺和語言。因此Quorum也同樣繼承了以太坊智能平臺的優缺點。

學習資源: Quorum文檔CryptoZombiesSolidity文檔OpenZeppelin

3. Wanchain

優點:

  • 在正常以太坊智能合約平臺特性之外,添加了用戶隱私特性。
  • 適用於跨鏈交易。

不足:

  • 和以太坊一樣。

智能合約語言: Solidity
現狀: 活躍。
說明:
Wanchain是以太坊的一個分支,因此它繼承了以太坊的許多屬性。此外,它還提供了用戶隱私特性。Wanchain側重於通過區塊鏈實現當前金融模型的數字化。

Wanchain的隱私特性是通過使用環簽名(ring signature)實現的,環簽名可實現交易簽名者完全匿名,併爲接收者提供了驗證發件者簽名的能力。此外,Wanchain還提供一次性地址(OTA,One Time Addresses)選項,實現了進一步的匿名功能。

圖片

Wanchain的分佈式賬本建立在以太坊的功能之上,因此任何以太坊DApp都可以在Wanchain上運行,而無需更改任何代碼。爲了增強這些應用程序,Wanchain提供了許多擁有擴展跨鏈功能和改善隱私保護的API,擴展了DApp的功能。

學習資源: Wanchain上實現智能合約的文檔Wanchain代幣CryptoZombiesSolidity文檔OpenZeppelinOliver Birch的Medium博客

4. æternity

優點:

  • 引入了新的智能合約語言和VM,實現代碼的快速安全執行。
  • 使用狀態通道和高效的方式執行合約,維持低代價交易。
  • 通過提供一種版本的EVM,簡化了將EVM合約遷移到æternity。

智能合約語言: SophiaSolidity,Varna
現狀: 活躍。
說明:

æternity智能合約的既定功能目標是支持在鏈上執行代碼。也就是說,代碼執行由礦工驗證,並且可以改變鏈狀態。
æternity智能合約的設計和實施還具有下述非功能性目標,按重要性順序列出爲:

  1. 合約的執行應該是安全的。
  2. 合約的執行應該是高效的、可擴展的。
  3. 合約的執行應該是低代價的。
  4. 具有從以太坊智能合約遷移的簡單方式。

目標一:合約執行應該是安全的

安全合約指的是用戶可以指定並自動地驗證合約的屬性。
爲了實現安全合約,æternity設計了一種新的功能語言Sophia,以及一種新的安全虛擬機FTWVM。

目標二:合約執行應該是高效和可擴展的

爲實現可擴展的解決方案,æternity提供了狀態通道(State Channel)和一種新的共識算法。
爲實現高效的合約執行,æternity提供了一種非常高層的語言,支持快速、直接地執行簡單的合約。對於更高級的合約,可使用Sophia語言。Sophia將會編譯爲一個專用於執行Sophia合約的虛擬機。該虛擬機也是一種高層虛擬機,其中具有操作區塊鏈和Sophia數據結構的指令,無需顯式管理堆棧和內存。

æternity也使用一種稱爲“Varna”的高層智能合約語言。該語言類似於比特幣的腳本語言,但是不提供循環和固定的瓦斯價格。Varna使用自身的虛擬機HLM(High Level Machine),代碼直接被節點軟件執行。Varna設計實現高速的日常合約。

目標三:合約執行應該低代價

合約執行的代價最終取決於礦工和用戶,但是通過提供狀態通道,實現了一種高效的合約執行方式,由此維持了簡單高層合約語言的低執行代價。

目標四:具有遷移以太坊智能合約的簡單方式

æternity通過提供一個版本的EVM,簡化了從EVM合約遷移到æternity。

學習資源: 智能合約文檔Sophia文檔Sophia簡介æternity的Medium博客

5. Zen

優點:

  • 完備性(參見下面給出詳細解釋)。
  • 鑑於智能合約語言是“獨立設計”的,因此更難以出錯,並且語言的表達力完全可以用於“形式化驗證”(參見下面給出的詳細解釋)。

智能合約語言: F*
現狀: 活躍。
說明:
與其它智能合約項目相比,Zen協議提供了一種完全不同的智能合約實現方式。

下面從智能合約的定義開始解釋。從最抽象的意義上看,智能合約是一種設計運行於去中心化環境中的計算機程序。也就是說,智能合約的運行是用於確認區塊鏈的共識。在比特幣中,智能合約實現爲Bitcoin Scripts形式,用於驗證交易正確與否。在以太坊中,智能合約實現爲EVM字節碼形式,用於更改EVM的狀態。

Bitcoin Script的侷限性在於它並非“圖靈完備”的,也就是說,它不能表達所有計算機程序。如果我們想要在智能合約中表達任意邏輯,那麼合約語言必須可執行任意邏輯,這樣才能確認共識。圖靈完備語言具備表達任何“不停止”程序的能力,即永遠不會停止執行的程序。通常,我們並不知道一個程序是否會完成並終止,或是程序需要多長時間纔會終止,執行程序需要多少計算資源。正是因爲我們不知道執行程序所需的資源,因此不能使用非圖靈完備語言確定共識。一個程序可能不會停止,這意味着也無法確定共識。

以太坊的EVM相比Bitcoin Script更具表達力。EVM爲每個EVM字節碼指令關聯了一個“瓦斯價格”(GAS Cost)。用戶支付一定量的“瓦斯”,EVM就開始執行智能合約指令。EVM首先計算一條指令的瓦斯價格,如果瓦斯量足夠繼續執行,那麼EVM將從用戶支付的瓦斯量中扣除所需瓦斯價格,執行指令並繼續。如果在指令執行完成前瓦斯量用盡,那麼執行指令將會失敗。使用這種方式,EVM可以表達幾乎所有的計算。以太坊智能合約的唯一侷限性在於合約必須最終終止,因爲用戶不會爲無限循環計算的執行而無限量地支付瓦斯。在實際運行中,我們很少關注那些不會終止的程序,因此這一侷限性制基本不構成問題。

EVM解釋字節碼指令和追蹤瓦斯消耗的過程是非常低效的。對於每條指令,EVM必須查看該指令的瓦斯價格,檢查剩餘瓦斯量是否充足,並從剩餘瓦斯量中扣除所需瓦斯價格。使用這種執行模型,很難以優化改進運行時間。

圖片

以太坊中所有智能合約必須終止的限制是有意義的。實現所有程序必須終止的語言,事實上並非圖靈完備的,只是“完備”而已。Zen在表達智能合約中使用了一種完備的語言,而不是依賴於某種通過追蹤瓦斯價格確保完備性的執行模型。完備語言並非絕對適用於表達包括循環和遞歸在內的所有邏輯,Zen協議的問題也正在於此。

Zen的智能合約語言是一種“依賴類型的語言”(Dependently Typed)。也就是說,每個表達式必須具有一個類型,並且類型依賴於表達式和類型。依賴性類型系統的表達力足以用於實現“形式化驗證”。這些類型可表達一個表達式中的任意屬性。例如,儘管在一些基本類型語言中,我們可以定義數字3的類型爲“Integer”。但是在一些獨立類型語言中,數字3也可以定義爲“Prime Integer”類型,或是定義爲“小於10的整數”類型。如何測定類型語言表達程序的資源消耗情況,具體細節參見這篇博客文章

如果類型不正確,那麼類型化語言會在編譯時報錯。而非類型化語言則不會這樣。如果程序表達了錯誤的資源消耗或是錯誤的斷言,那麼編譯將會失敗。

Zen協議的智能合約方式使用了這一方式。它用獨立類型化源代碼表達資源的消耗情況。如果代碼編譯通過,那麼它確保了資源消耗是正確的。鑑於我們使用了完備語言,因此我們知道程序終將結束。而我們從代碼本身可瞭解資源的消耗情況,因此我們就預先知道了代價,進而無需在運行代碼前解釋字節碼指令並計算瓦斯消耗量。這體現了編譯代碼相對與解釋代碼的高效性。Zen當前使用了F#語言,並將F#編譯爲CLI字節碼,然後執行。Zen協議也可以使用其他實現方式,例如使用OCaml和C等。

編譯過程只需做一次。代碼一旦通過編譯,就可以多次執行,這極大地提高了效率。

下面進一步詳細闡述整個過程。在交易中,用戶提交自己的智能合約源代碼,節點將編譯代碼,從中提取程序及表達程序資源消耗的表達式。之後節點執行合約,這要比執行解釋型代碼更加高效。代碼本身就是合約的組成部分,而編譯後的二進制代碼則不屬於合約,並且只存在於節點的本地。在合約提交到“激活”之間存在延遲,使得節點可以在接收到合約後開展並行的合約編譯,進而使得合約在數個區塊後得以使用。合約的編譯並不影響交易通量。

Zen智能合約不僅運行速度快,而且在大部分時間中也可以並行執行。

Zen協議在運行智能合約所需的時間上具有較少的侷限性,可以更快地處理包含智能合約的交易。Zen智能合約不僅運行速度快,而且在大部分時間中也可以並行執行。

不同於EVM,Zen協議不將完整的虛擬機作爲共識的一部分進行維護。不同於EVM的單線程執行方式,Zen合約之間是相互獨立的,因此支持並行執行合約。這極大地提高了執行效率,因爲現代硬件適合於高度併發。鑑於Zen合約是無狀態的,只實現功能,因此合約中不存在競爭條件,或存在其它妨礙併發執行的問題。包含同一智能合約的多個交易可能並不易於並行執行,必須要串行執行。但是,這種方式運行的是高效、編譯後的代碼,因此性能相比起在EVM上執行同等計算還是要快一些。

學習資源: Zen Medium技術博客Zen官方文檔Asher Manning的Medium博客

6. Counterparty

優點:

  • 基於比特幣網絡的以太坊智能合約(用於共識)。

不足:

  • 和以太坊具有同樣的不足之處。

智能合約語言: SoliditySerpent
現狀: 活躍。
說明:
Counterpart依靠比特幣實現共識,但它也支持以太坊智能合約。下面給出其在更高層級上的工作機制:

  • 用戶使用Solidity或Serpent等語言編寫智能合約代碼,並編譯爲更緊湊的格式(字節碼)。
  • Counterparty將創建並廣播一個publish交易,將交易代碼嵌入到比特幣區塊鏈中。這是以一種可花費的方式實現的,並不會“污染”整個區塊鏈。
  • 交易一旦發佈,智能合約就“存活”於一個指定的地址上,看上去和正常的比特幣地址毫無二至,只是地址以字母"C"開頭。
  • 用戶進而可以使用Counterparty創建並廣播execute交易,調用智能合約代碼中指定的函數或方法。
  • 一旦execute交易在廣播後得到比特幣挖礦者的確認,每個在運行的Counterparty節點將接收到該請求,並執行其中的方法。智能合約代碼在執行中,會修改存儲在Counterparty數據庫中的合約狀態。鑑於每個Counterparty節點具有相同的合約代碼(由比特幣機制確保)和相同的EVM代碼,並且所有代碼均爲確定性的,因此每個節點將實現同樣的狀態更改。
  • 其他用戶也可以向智能合約發送Counterparty資產。這些資產將得到保存,並用於今後的execute調用。該機制對於融資等類型的合約非常有用。
  • 從本質上看,我們所看到的智能合約發佈,以及執行合同中特定功能或方法的命令,二者均爲比特幣區塊鏈上的實際交易。因此,這兩個操作會受到比特幣約10分鐘阻塞時間的限制。但是,執行智能合約代碼一旦啓動,通常會以節點處理速度運行。

比特幣的10分鐘區塊生成時間限制對EVM的影響

一個合約在編寫完成後,將會“發佈”到區塊鏈上,其數據將嵌入到區塊鏈中,這確保了所有Counterparty節點執行同一合約代碼。合約一旦發佈,合約中的函數或方法將被執行。

合約的發佈操作和執行操作均作爲Counterparty交易發佈(在比特幣交易中),進而受限於區塊生成時間。但是,合約一旦開始執行,就會按節點主機處理性能逐行儘快得到執行,合約中的每一個“執行步驟”並不受限於區塊的生成時間,合約方法或調用方法將會立刻得到執行。

這樣,區塊的生成時間限制從整體上看對合約影響不大,只是會影響合約的最初發布,以及合約中方法的最初執行。

如果讀者對Counterparty還有其它不解之處,推薦訪問此處提供的擴展資源

學習資源: CounterParty smart contract docs

7. Rootstock (RSK)

優點:

  • 支持基於比特幣實現圖靈完備的智能合約。

智能合約語言: Solidity
現狀: 活躍。
說明:

Rootstock(RSK)是一種在比特幣上集成了圖靈完備虛擬機(TCVM,Turing Complete Virtual Machine)的智能合約平臺。它還提供了其它一些網絡上的改進,例如更快的交易、更好的可擴展性等,以及一些支持新應用場景的特性。

圖片

RSK是首個與比特幣雙向掛鉤的開源智能合約平臺。它也是通過合併挖礦而獎勵比特幣礦工,使礦工能夠積極地參與到智能合約中。RSK的目標是通過實現對智能合約的支持、近乎實時的支付以及更高的可擴展性,它增加了比特幣生態系統的價值和功能。

學習資源: Rootstock

8. RChain

優點:

  • 圖靈完備。
  • 智能合約可使用多種行業領先的功能,例如:元編程、響應式數據流、模式匹配等。因此,RChain智能合約具有更好的可編程性。

智能合約語言: RHOLang
說明:

RChain項目側重於可擴展性。它使用了多線程區塊鏈,並具有自身的智能合約語言,目前能與以太坊等頂級區塊鏈項目一爭高下。RChain的構建遵循如下最小需求:

  • 動態智能合約功能,支持更多的用例實現。
  • 併發執行,支持多個獨立的智能合約可以緊鄰着執行。
  • 使用Casper智能合約協議,計算強度低,不會浪費資源。

圖片

Rho虛擬機(RVM)是一種基於JVM的虛擬機。RVM的執行環境支持操作多個運行智能合約的RVM以多線程方式併發運行。這種併發結構支持將多個獨立進程組合爲一個不會產生資源競爭的複雜進程。因此,這種架構也支持多鏈(即每個節點存在多個區塊鏈),並且每個交易由獨立執行的VM實例處理。

Rholang合約

RChain節點可使用Rholang合約。Rholang是一種“面向進程”的合約,所有計算通過消息傳遞方式完成。消息通過一種非常類似於消息隊列的“通道”傳遞。注意在本文中,“命名”(name)和“通道”(channel)是同義詞,這是因爲Rholang所基於的rho代數中使用了“命名”一詞。用戶可以在“命名”上發送和接受信息,因此從語義上看,“命名”和“通道”是等價的。用戶可以通過此處Web界面試用部分Rholang代碼。

RChain爲Rholang重建了ERC20功能,支持用戶自建代幣智能合約並在RChain上部署。在RChain的Github代碼庫中提供了一些例子。

學習資源: RCHain開發者網站RHOLang教程RChain的Medium博客

9. Qtum

優點:

  • 可以看成是對以太坊智能合約平臺的一種改進。它解決了可擴展性、形式化驗證工具缺失、使用SPV(簡單支付驗證,simple payment verification)時最小移動解決方案缺失等問題。

不足:

  • 由於完全兼容EVM並支持Solidity合約,Qtum繼承了以太坊智能合約在安全上的缺陷。

智能合約語言: Solidity
現狀: 活躍。
說明:
Qtum是一種在設計上兼容以太坊的智能合約平臺,它改進了以太坊一些明顯的缺陷,例如可擴展性、缺少形式化驗證工具,使用SPV時缺少最小移動解決方案等。Qtum使用一種新的底層區塊鏈和共識算法解決了上述問題。在Qtum看來,這些改進使得平臺可爲輕量級移動和IoT應用提供更好的支持。Qtum項目意在成爲一種“企業通用區塊鏈”,有望在未來將其技術應用於金融服務、供應鏈管理、社會媒體、遊戲等行業。

Qtum本質上是一種基於以太坊的智能合約系統,共識使用的是一種改進版本的Blackcoin的PoS,運行在基於比特幣的區塊鏈上。Qtum添加了一個自定義的採納層,將以太坊賬戶的金額映射到一組比特幣UTXO上。

由於Qtum是完全兼容EVM的,並支持Solidity合約語言,因此Qtum也繼承了以太坊智能合約在安全上的所有不足之處。

Qtum計劃通過添加一種x86虛擬機實現智能合約的擴展,支持使用C++、Java和Haskell等語言開發智能合約。儘管這一改進將使得Qtum項目適用於更多的開發人員,並可使用現有的工具,但是Qtum並未針對繼承自Solidity設計中的安全問題做出改進。

Qtum白皮書中指出,Qtum的目標是開發一種稱爲QSCL(Qtum Smart-Contract Language)的智能合約語言。據白皮書闡述,QSCL是一種“專門用於實現形式化驗證”的語言。但是除了一篇由白皮書作者之一發表的學術論文之外,QSCL尚未提供更多可參考細節。在該論文中,論文作者提出了自己開發的一種“跨組織協作本體”語言,但是在論文中並未採用QSCL命名。鑑於QSCL資料的匱乏,看上去Qtum現在應該未再推進該創意的實現。

學習資源: 智能合約開發人員指南Qtum

10. Ark

智能合約語言: 待定。
現狀: 不活躍
說明:
Ark意在創建一種類似於以太坊的智能合約平臺。ARK提供集成的虛擬機,支持用戶發佈ARK智能合約。Ark與以太坊的唯一差別在於,Ark使用dPoS作爲共識機制,加快了交易速度。
學習資源: ACES Ark轉以太坊智能合約服務BoldNinja的Medium博客

本篇小結

智能合約是以數字形式定義的承諾,控制數字資產並涵蓋合約參與者約定的權利和義務。它由計算機系統自動執行。在基於區塊鏈的智能合約中,數據管理、事務驗證和狀態處理都是在區塊鏈上完成的,區塊鏈提供完備的狀態機接受和處理各種智能合約程序。該系列文章將列舉四十種支持或是用於開發智能合約的平臺或項目,並介紹影響智能合約功能的主要因素。在下一篇中,我們將繼續給出10種支持平臺,其中包括著名的EOS、HyperLedger Fabric、Corda等。

作者簡介Vaibhav Saini是一家由MIT Cambridge 創新中心孵化的初創企業TowardsBlockchain的聯合創始人。Saini也是一名高級區塊鏈開發人員,具有Ethereum、Quorum、EOS、Nano、Hashgraph、IOTA等多種區塊鏈平臺的開發經驗。他目前是德里印度理工學院(IIT Delhi)的一名大二學生。

查看英文原文: ContractPedia: An Encyclopedia of 40 Smart Contract Platforms A Complete List of all Smart Contract supportive Platforms

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