區塊鏈技術精華:四十種智慧合約支援平臺(四)

weixin_34127717發表於2019-01-23

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

區塊鏈技術的精華:四十種智慧合約支援平臺(一)
區塊鏈技術的精華:四十種智慧合約支援平臺(二)
區塊鏈技術的精華:四十種智慧合約支援平臺(三)

正文:

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

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

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

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

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

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

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

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

           a93e64a691d5aff8f78cd63130cf23b89182d235

下面詳細列出四十種智慧合約平臺/專案。本文是該系列文章的第四篇,我們繼續給出餘下的11種支援平臺,其中包括著名的XTRABYTES、Universa、ETC等。

30. XTRABYTES

智慧合約語言: 無特定語言。
現狀: 不活躍。
說明:

DApp開發人員可以通過XTRABYTES的分散式命令訊息API(DICOM API,Distributed Command Message API)訪問其核心功能和資料。DICOM API使得開發人員可使用多種程式語言實現DApp程式碼。我們稱此為“程式碼可感知”。開發人員只需在程式碼中呼叫API函式。這使得各類開發人員都可快速上手XTRABYTES DApp的開發。

學習資源: XTRABYTES的Medium部落格XTRABYTES™ (XBY)的Medium部落格

Xtrabytes Reddit | Xtrabytes Github |Xtrabytes Telegram

31. PolkaDot

現狀: 不活躍。
說明:

可並行鏈(Parachain)是區塊鏈的一種簡化形式,它將安全付諸於由“中繼鏈”提供,而非自身提供。中繼鏈的名稱來自於它不僅為所附著的可並行鏈提供安全,而且為二者間的安全訊息傳遞提供保證。可並行鏈的一個關鍵特性是所執行的計算是天生獨立的。在確定哪些交易間會產生“衝突”時,使用圖靈完備智慧合約的完全通用系統會存在問題,這意味著那些潛在可並行的交易通常是順序執行的,進而浪費了有價值的計算時間。在可並行鏈之間劃分明顯界限,這使得我們可以全部一次性執行各鏈上的交易,而不用擔心交易間會產生衝突。如果有十條可並行鏈,那麼可以使用同一安全源執行十倍的工作。

Polkadot不僅支援直接連線鏈,而且支援完全託管但可連線鏈。可並行鏈,或是使用更多網路共識機制獲得共識的原生支援鏈,將可從Polkadot的安全池機制中獲益。安全池還支援每個可並行鏈(以及中繼鏈)使用整個網路的驗證者,向整個網路提供安全。這意味著每個可並行鏈將從整個生態系統的網路效應中受益。如果可並行鏈與Polkadot相容,那麼它就可以使用Polkadot共識機制的安全。

\"圖片\"
Parachain和Bridge生態系統

對於其它具有自身狀態歷史和共識方法的現有專案,Bridge擔當支援這些鏈連線到Polkadot的連線層。Bridge實現將具有智慧合約能力的區塊鏈連線到Polkadot,而無需對這些鏈的原生協議做任何修改。Parity Technologies最初的工作就聚焦於使用Bridge連線兩個類以太坊鏈。例如,它可以在以太坊的PoW鏈和以太坊的PoA鏈之間(即兩個鏈之間的賬戶)相互交換價值。

比特幣指令碼和EVM這類模型的核心設計目標是互操作性,但是使用這類模型的系統要為其實現的方方面面付出不斷增長的執行成本 ,而不僅僅是讓執行於同一網路的其他系統可以訪問而已。與之相對比,Polkadot的可並行鏈通過非同步訊息傳遞實現相互通訊,這樣只需在可並行鏈的接觸邊界上支付資料唯一性的代價。

注意,建立一種提供完全通用、圖靈完備智慧合約框架的可並行鏈是完全可能的。一個簡單的例子是EVM提供的可並行鏈。出於上述原因,在該可並行鏈上實現的合約不僅將受益於以太坊智慧合約的通用性和互操作性,而且也會受限於這些特性。首要差異在於它完全是選擇性加入(opt-in)的。Polkadot的最強大的特性之一,就是在考慮了具備整合一些關注解決方案的能力的同時,保持了完全通用框架的可選擇性。

學習資源: PolkaDot的Medium部落格, Polkadot

Polkadot Reddit | Polkadot GitHub | Pokadot Telegram

32. Radix

智慧合約語言: JavaScript,TypeScript。
現狀: 不活躍。
說明:

Scrypto是一種狀態機,它為執行於其上的虛擬機器提供安全和功能抽象。如可能,Scrypto將為虛擬機器提供介面,進而執行任何語言編寫的指令碼。

規劃實現的JavaScript模組,是一種與Scrypto狀態機互動的虛擬機器。

學習資源: Radix開發人員入門Radix DLT的Medium部落格
Radix Reddit | Radix Github | Radix Telegram

33. Exonum

智慧合約語言: Rust,並正在考慮與Java的繫結。
現狀: 活躍。
說明:

“服務”(Service)實現了指定用於Exonum應用的業務邏輯。服務是Exonum框架的主要擴充套件點,它具有與其它區塊鏈中智慧合約同樣的作用。

\"圖片\"
Exonum服務的架構

開發Exonum服務類似於Web或企業平臺中的開發服務,二者具有相同的主要元件,分別為:

端點(Endpoints)

一個服務包括了一組實現為REST API的端點。服務使用端點與外部世界交流。Exonum框架擔當中介軟體,在服務間分發請求,並對服務開發人員提供抽象的資料序列化/去序列化、訪問控制以及其它常見中介軟體任務。

Exonmu具有三種型別的服務端點:

  • 對應於REST中PUT/POST請求的交易;
  • 對應於REST中GET請求的讀取請求;
  • 代幣管理和維護端點的私有API,通常外部世界不可訪問。

Exonum智慧合約與區塊鏈使用的其它模型的關鍵區別如下:

  • 受限的環境:Exonum只執行預定義的請求型別,不允許執行從客戶接收的非信任程式碼。這導致更受控的環境,易於實現智慧合約的安全性。
  • 無隔離:請求處理與系統核心在同一執行環境中處理。這對於提高效能非常有好處,但存在一定的安全危險。
  • 本地狀態。Exonum服務可能會定義特定於執行服務節點的本地狀態。本地狀態可用於管理一些保密資訊,例如私鑰等。本地狀態可使用私有服務端點管理。通過使用本地狀態,服務比其它區塊鏈中的服務更加活躍。例如,錨點服務使用本地狀態完全自動化錨點交易簽名。
  • 交易分割處理。交易驗證是交易處理中的一個獨立步驟。它是在接收到交易後並在交易應用到區塊鏈狀態之前立刻執行。驗證可能包括認證檢查(例如,驗證交易簽名),以及其它對交易內容的結構檢查。同時,交易驗證不能訪問當前區塊鏈狀態。

學習資源: Exonum官方文件Bitfury團隊的Medium部落格

Exonum GitHub | Exonum Reddit | Exonum Telegram

34. Universa

智慧合約語言: Javascript。
現狀: 活躍。
說明:
為了理解Universa智慧合約的工作機制,下面我們分各個部分介紹。

參與方(Party)

Universa的每位參與者稱為“參與方”(Party)。參與方可以完全匿名,或者是標識的實體。有多種方法標識一個參與方。在根合約中,參與方可如下標識:

  • 使用合約內容中的公鑰。例如,釋出者或屬主。
  • 使用匿名公鑰ID,支援識別參與方的公鑰,並在首次使用之前無需公開。例如,匿名購買。

參與方可以在合約記錄中新增自身的其它細節,例如名字、暱稱、社會保險或護照號碼等。

合約內容

1.組成部分

  • 定義。定義在修改中是不可變的,其中包括髮布者、釋出時間戳、許可(一些許可也可以更改狀態)和建立者希望不可更改的所有內容。
  • 狀態。狀態是在修改中可以更改的可變部分,其中包括修改編號、建立者、時間戳、指向前後修改的引用、可更改角色,在一些情況下還包括許可和任何可變客戶資料。
  • 附件。在定義或狀態中醫簽名引用形式提及的所有檔案。

Universa網路知道定義和狀態,其餘部分從不傳送到網路。附件是非常重要的部分,其中常常包含敏感的私有資訊。儘管該資訊在合約狀態和定義中被簽名引用,因此受到很好的保護,但是最好的保護方式是不將附件傳遞到Universa網路中。

由此,合約整體只在各涉及的參與方間交換,可使用任何適用的傳遞方式,例如電子郵件、聊天軟體、雲、USB Flash等。附件的不可變性由合約中的簽名引用保證,進而被參與方簽名,並在網路上驗證通過。

信任鏈的工作機制為:

  1. Universa網路批准合約的修改,提供註冊時間,確保狀態和定義的不可變性。
  2. 對修改簽名的參與方通過簽名確認狀態和定義的正確性,處理所有提及的附件並確認同意。
  3. 狀態和定義中的經簽名的引用確保了儲存在客戶儲存某次中的相應附件的不可變性。
  4. 指令碼

沒有指令碼,就無法體現智慧合約的智慧。Universa智慧合約支援以附件形式新增JavaScript指令碼。指令碼可以完全自動化地實現客戶需要執行的操作、生成新的合約並處理事件。第三代Universa客戶甚至可以使用GUI客戶端執行自治Web服務或Web應用,以GUI應用方式與使用者介面一併執行工作流自動化。Universa的目標是藉助於整合Universa平臺和服務,支援智慧合約實現全功能應用。

Universa也可使用Coffeescript等其它一些可編譯為純JavaScript的語言,甚至可作為附件整合到合約中。但是在執行時,只會使用經簽名的編譯後JavaScript集合。

指令碼被客戶軟體在客戶環境中執行。Universa網路甚至看不到指令碼,但是它總是會檢查結果,以確認與合約定義和狀態的一致性。這意味著,即便指令碼會執行一些禁止行為,網路也不會接受執行結果。通常,更簡單的方法並非嘗試檢查指令碼源中隱含的漏洞,而是在知道一些許可和條件的情況下限制所允許執行的操作。相比指令碼而言,許可DSL更乾淨並直接。由Univerda遠端執行的許可檢查也不會被指令碼所跳過,檢查是本地執行的,不會被傳遞到Univerda節點上。

指令碼的一般執行迴圈為:指令碼被使用者或一些事件啟用,或是在伺服器環境中啟用,例如輸入合約,或整合比特幣服務的支付通知等。進而執行指令碼,修改其狀態(每個指令碼具有可操作的本地儲存,並可以訪問合約鏈),建立新的Universa修改並批准,生成合約。如果有必要,合約將通過任何連線通訊工具傳送到網路。事實上,指令碼允許使用HTTPS API連線任何網路。

  1. 表示

智慧合約是物件(資料結構或雜湊)的一種樹結構,可使用任何現代格式儲存,例如JSON、YAML、XML、BOSS等任何可儲存陣列、結構、字串和數字的格式。基於YAML的DSL表示通常用於新合約模板。在網路中,合約通常以BOSS格式序列化,因為這種方式是儲存二進位制資料的最好方式,在Universa中的鍵、簽名和二進位制ID等中廣泛使用。

膠囊(capsule)

每個智慧合約被打包為一種受嚴格保護的、經簽名的容器,稱為“膠囊”(Capsule)。膠囊由膠囊體和一組擴充套件簽名組成。膠囊體中打包了二進位制合約內容,以及一組擴充套件簽名。每個擴充套件簽名對膠囊體和屬主型別、指紋和時間戳做簽名,可以使用很多電子簽名型別。相應的公鑰(或其匿名ID)通常在合約體中,這樣系統可以檢查所提及的金鑰是否用於對合約簽名。

合約的膠囊包含了加密資料,以此作為Universa網路所知道的合約部分。膠囊資料中不應該包括任何敏感的私有資料,並必須作為經簽名的引用附在合約中(例如,儲存在外部檔案中),永遠不會傳遞到Univerda網路上。這種設計不僅降低了無必要的網路流量,而且保護了私有資訊。

學習資源: Universa官方文件Universa的Medium部落格

Universa Reddit | Universa GitHub | Universa Telegram

35. Urbit

智慧合約語言: Hoon。
現狀: 活躍
說明:

Urbit是個人伺服器的一種端到端的安全網路,構建於一種完全重建(clean-slate)的系統軟體堆疊之上。它使用以太坊實現其功能。

可以將Urbit簡單地看成是一種“個人區塊鏈”。和區塊鏈一樣,Urbit也是一種確定性的虛擬計算機。其語義定義為將其事件歷史對映為當前狀態的生命週期凍結函式。不同於區塊鏈,Urbit例項是一個用於單使用者的私有計算機,而非所有人均可使用的公有記錄。

Urbit的生命週期函式實現為:一個稱為“Nock”的微直譯器(nano-interpreter)將一種稱為“Hoon”的函式式型別語言編譯為Nock。使用Hoon編寫一種事件驅動的作業系統Arvo。Nock上的所有事物均可在Urbit自身的中繼包網路Ames上升級。在使用測試金鑰的情況下,Ames是活躍並穩定的。

Urbit直譯器可執行於任何Unix系統上。Urbit伺服器是一種單層儲存,它可以是資料庫,也可以是應用引擎。每個Urbit事件是一個交易。Urbit在語義上是凍結的,不能呼叫Unix。

使用者的Urbit例項就是使用者的個人伺服器。Urbit最終將包含並管理整個數字化生命週期。基於安全或隱私上的權衡考慮,使用者可以選擇是在家,還是在雲上計算。但是,Urbit的形式化語義使得交付比遷移更為棘手,因此使用者不應鎖定於使用某個計算提供商。

學習資源: Urbit官方文件Urbit主頁

Urbit GitHub | Urbit Reddit | Urbit Telegram

36. Soil

優點:
與以太坊一致。
不足:
與以太坊一致。
智慧合約語言: Solidity。
現狀: 活躍。

說明: SOILCoin是一種與以太坊並行的加密貨幣,它使用了智慧合約和DApp,執行在由使用Dagger演算法的區塊鏈技術提供安全的“全球計算網路”上。這種EVM是由一種稱為“SOIL”的數字代幣推動的。SOIL通過PoW挖礦獲得,並充當在SOIL幣網路上執行計算過程的瓦斯氣體。

學習資源: Soil文件

37. Expanse

優點:
與以太坊一致。
不足:
與以太坊一致。
智慧合約語言: Solidity。
現狀: 活躍。
說明:

Expanse被認為是以太坊的首個穩定分支實現,其智慧合約實現與以太坊相同。

學習資源: CryptoZombiesSolidity文件OpenZeppelin

38. Ubiq

優點:
與以太坊一致。
不足:
與以太坊一致。
智慧合約語言: Solidity,
現狀: 活躍,
說明: Ubiq是以太坊的一個分支實現,並做了部分改進。這些改進並未影響以太坊的智慧合約實現。
學習資源: CryptoZombiesSolidity文件OpenZeppelinAlex Sterk的Medium部落格

39. Ethereum Classic

優點:
與以太坊一致。
不足:
與以太坊一致。
智慧合約語言: Solidity。
現狀: 活躍。
說明: Ethereum Classic是以太坊的一個分支實現,其智慧合約與以太坊相同。
學習資源: CryptoZombiesSolidity文件OpenZeppelin

40. Monax

優點:
與以太坊一致。
不足:
與以太坊一致。
智慧合約語言: Solidity
現狀: 活躍
說明: Monax重新實現了EVM,並提供了SDK。
學習資源: Monax docs

其它一些智慧合約平臺

其中還包括OmniLayer(dexx)、Ardor等。本文不再一一列舉。

結束語

智慧合約是以數字形式定義的承諾,控制數字資產並涵蓋合約參與者約定的權利和義務。它由計算機系統自動執行。在基於區塊鏈的智慧合約中,資料管理、事務驗證和狀態處理都是在區塊鏈上完成的,區塊鏈提供完備的狀態機接受和處理各種智慧合約程式。該系列文章將列舉四十種支援或是用於開發智慧合約的平臺或專案,並介紹影響智慧合約功能的主要因素。本篇是該系列文章的第四篇。

內容到此為止。如果讀者發現其中有所遺漏,或是存在錯誤,歡迎在評論中留言。

感謝閱讀。

作者簡介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

相關文章