一起學智慧合約之一智慧合約的程式語言和開發環境
一、程式語言
智慧合約的編寫語言有好幾種:
Solidity:有點類似Javascript風格, 檔案的字尾名是.sol.。
Serpent:與Python風格類似的Serpent, 檔案的字尾名是.se。
LLL:類似Lisp,估計好多人都沒聽說過這個語言。
以膠Serpent火過一段時間,不過現在智慧合約的主流程式語言是Solidity,維護也很及時,比較比較健壯穩定。
舉一個小例子:
pragma solidity ^0.4.8;
contract Welcome
{
function PrintWelcome() constant returns (string)
{
return "Welcome";
}
}
非常簡單,返回一個固定的字串。
二、編譯
編譯使用solc,這個在以太坊github上有原始碼供分析。不過它是用c++寫的,並且涉及到了編譯連結的很多知識,如果想啃,還需要學習參考一下這兩方面的資料。
三、開發環境
智慧合約的開發環境,也有不少,包括各種測試環境和編譯工具,簡單介紹一下,(略過安裝,大家可去網上查詢相關安裝資料,都比較簡單)。
- 普通環境
testrpc:非常方便容易的建立測試網路的方法. Testrpc可以配置好一些帳戶讓你不必如私鏈等還得轉來轉去,它更適合測試,但是有些東西可能真正部署到鏈上會有一些問題,所以還是要引起注意。
Truffles:非常流行的開發框架,能夠在本地編譯、部署智慧合約,最初用過一段時間,現在在偶爾也用。
- 整合環境
整合環境也經過了幾個變化。現在在流行的是基於web的Remix,原來還有一個mix,不過因為編寫這個工具的大神從以太坊離開了。所以還是搞Remix吧。
三、部署和呼叫
部署可以通過Remix來完成,也可以用命令通過Web3j來實現,假如你有一個合約,把它拷貝到Remix上,編譯。就會得到一個部署的命令。類似於:
var welcomeContract =
web3.eth.contract([{"constant":true,……"type":"function"}]);
var welcome = welcomeContract.new(
{
from: web3.eth.accounts[0],
data: '0x608060……',
gas: '4700000'
}, function (e, contract){
console.log(e, contract);
…….
}
})
然後把它拷貝到到geth的控制檯上,執行就可以了,如果正在挖礦的私鏈,可以很快得到結果:
Contract mined!
address: 0x096aa2dd30751f49b62f5372150984cf1cfd3124
transactionHash: 0x17c8d760a243ee8dcf2bc9f258e3290f69c4e61ad49d2eadff0eebe525a05cb5
這樣就可以使用了。使用方法:
在geth的控制檯上輸入:
welcomeContract. PrintWelcome ()
這時在控制檯上就會顯示:”Welcome”。
最後,不管是程式語言還是編譯器亦或是程式設計環境,都在不斷的變化,所以需要及時跟進。那麼,現在就可以順利的學習Solidity語言並用其開發智慧合約了。
如果對c++和區塊鏈感興趣,歡迎關注: