引言
本文假設你已經對區塊鏈有一定的瞭解。智慧合約是1990年代由尼克薩博提出的理念,以太坊首先看到了區塊鏈和智慧合約的契合,釋出了白皮書《以太坊:下一代智慧合約和去中心化應用平臺》,並一直致力於將以太坊打造成最佳智慧合約平臺。因此目前的智慧合約基本都是執行在以太坊區塊鏈上的計算機程式。本文主要幫助大家快速編寫並執行第一個智慧合約。
語言和IDE選擇
目前智慧合約最受歡迎的程式語言為Solidity,但是並不只有Solidity。編寫Solidity程式碼,我們可以使用Remix,它是一個基於瀏覽器的Soldity IDE,網址為http://remix.ethereum.org/。Remix支援編寫、測試和部署智慧合約。Remix介面如下圖
編寫程式碼
學一門語言的第一個程式毋庸置疑都是HelloWorld,那麼我們就來寫一個HelloWorld的智慧合約吧。合約程式碼如下。
pragma solidity ^0.4.21;
contract HelloWorld {
string hello = "Hello World!!!";
event say(string _value);
function sayHello() public {
emit say(hello);
}
}
合約程式碼第一行指定該合約使用的Solidity版本為0.4.21,不支援高於0.4.21版本的Solidity特性。
在Solidity中,contract關鍵字包含的程式碼段即表示一個智慧合約,它擁有一些成員變數,表示該合約的資料,如我們的HelloWorld中的hello,我們可以修改操作這些成員。同時它擁有一些function,可以被他人呼叫。
event是Solidity提供的一種事件和訂閱機制,智慧合約能夠發出一些event,合約呼叫者能夠監聽這些事件並作出相應的反應。
這個合約沒有做很多事情,它只會在有人呼叫它的sayHello方法時,發出一個say事件。接下來讓我們來部署和執行它。
部署和執行合約
首先我們需要編譯這段程式碼,在Remix的右邊有一個Compile的tab,點選Start to compile,編譯成功,如果失敗會有錯誤提示,改正即可。
然後我們需要將其部署到區塊鏈上,切換tab到Run。
Remix支援三種環境執行合約。其中如果為JavaScript VM,則合約會在瀏覽器JavaScript沙箱區塊鏈中被執行,可以理解為Remix使用了瀏覽器的JS環境虛擬了一個區塊鏈虛擬機器。如果為Injected Provider,則Remix將會連結Matamask或者Mist這些區塊鏈錢包,通過它們來間接部署和呼叫合約。最後為Web3 Provider,Remix會連結Geth等遠端區款連節點,來部署和呼叫合約。
簡單起見,我們將使用JavaScript VM,它將為我們初始化出五個區塊鏈賬號,使用預設賬號即可。將Environment設定為JavaScript VM。如下圖。
上圖除了Environment和Account依次往下,我們將能夠看到Gas Limit,這是執行一個Transaction我們能夠接受的最大代價。Value表示下一次呼叫我們將向合約賬戶轉賬多少ether。
接下來的HelloWorld表示我們將建立的合約。點選Create既能夠建立這個合約。如下圖我們看到HelloWorld合約已被建立。
我們可以點選sayHello呼叫。可以看到已經呼叫成功,在logs中列印出了我們發出的event。
結語
在本文中,我們編寫了一個最簡單的智慧合約,並部署和執行了該合約。我們並沒有將合約部署到實際的鏈上,只是在JS 沙箱虛擬機器中執行了它。後面的文章中我們將會繼續講解如何將合約部署到鏈上。