1. 程式人生 > >Python:不同區塊鏈智慧合約開發語言的選擇

Python:不同區塊鏈智慧合約開發語言的選擇

在本文中,將介紹比特幣、超級賬本Fabric和以太坊這三種區塊鏈中,分別使用什麼開發語言來進行智慧合約的程式設計,並提供你進一步學習的資源連結。

我先介紹一下,我從事Python近9年,接下來我介紹一下我對於區塊鏈的見解,如果對於Python有不懂得可以騷擾我:1547251666。。或者關注微信公眾號:Python從程式猿到程式設計師

比特幣

說起比特幣,可能大家以為,不就是一種貨幣嘛!但是比特幣的意義卻不同

比特幣是第一個真正意義上的區塊鏈,不過,從嚴格意義上來講,它對智慧合約的開發者是不友好的。

可以用一種低門檻的程式語言Bitcoin Script在比特幣系統上編寫智慧合約。每個比特幣地址都對應著一個Bitcoin Script程式。看起來是這樣:

請點選此處輸入圖片描述

另一種較高級別的語言是Ivy,它可以編譯成Bitcoin Script。Ivy能夠幫助你編寫自定義的比特幣地址,這種地址與隔離見證(SegWit)相容,在比特幣協議(包括簽名檢查、hash特徵值(commitment)和時間鎖)的支援下,可以執行任意條件組合。例如:

請點選此處輸入圖片描述

Ivy的github地址:https://github.com/ivy-lang/ivy-bitcoin

比特幣“虛擬機器”——協議中負責執行Bitcoin Script程式的一部分——與以太坊或者Chain Protocol等其它智慧合約平臺的虛擬機器相比(功能)更加有限,其指令系統甚至不是圖靈完備的。但Bitcoin Script的確提供了一組很有用的基礎原語(primitives)——簽名校驗、雜湊計算以及相對和絕對的時間鎖——另外還能對這些原語進行自由組合。

以太坊

以太坊是第一個提供完善的智慧合約開發框架的區塊鏈,因此它也被稱為區塊鏈2.0的代表。事實上,目前絕大多數的區塊鏈應用,包括ICO代幣發行,都是基於以太坊來實現的智慧合約應用。

以太坊有四種專用語言可以用來開發智慧合約:

  • Solidity ,受JavaScript 啟發

  • Serpent ,受Python啟發

  • Mutan,受Go 啟發

  • LLL 受Lisp 啟發

這四種語言都是為面向合約程式設計而從底層開始設計的語言,但從目前的發展來看,Solidity已經稱為以太坊智慧合約開發當之無愧的首選語言。

Solidity的語法類似於JavaScript,這降低了學習門檻,易於被掌握和使用,因為JavaScript是Web開發者的常用語言。例如,下面是一個使用Solidity開發的簡單但完整的智慧合約:

請點選此處輸入圖片描述

合約程式碼第一行指定該合約使用的Solidity版本為0.4.21,不支援高於0.4.21版本的Solidity特性。

在Solidity中,contract關鍵字包含的程式碼段即表示一個智慧合約,它擁有一些成員變數和函式,看起來非常類似於傳統的面向物件開發中的類。

超級賬本fabric

fabric是超級賬本大家庭中最成熟的一個區塊鏈專案,主要用於行業鏈、聯盟聯或私有鏈,它不需要通過挖礦來形成共識,因此可以達到很高的交易速度。

在fabric中,智慧合約被稱為鏈碼(Chaincode),實質上是控制區塊鏈網路中的不同實體或相關方如何相互互動或交易的業務邏輯。簡言之,鏈程式碼將業務網路交易封裝在程式碼中。可以呼叫鏈程式碼來設定和獲取賬本或 world state。

超級賬本可以使用go、java或者nodejs來開發智慧合約,不過支援最好的還是go語言。下面是使用go開發的一個簡單地fabric智慧合約:

請點選此處輸入圖片描述

frabric的智慧合約可以使用一個go中的類實現,它必須要實現約定的藉口Init和Query。

Init 方法 在鏈程式碼首次部署到區塊鏈網路時呼叫,將由部署自己的鏈程式碼例項的每個對等節點執行。而只要在區塊鏈狀態上執行任何讀取/獲取/查詢操作,就會呼叫 Query 方法。