本文假設你已經對區塊鏈有必定的瞭解。智能合約是1990年代由尼克薩博提出的理念,以太坊首先看到了區塊鏈和智能合約的契合,發佈了白皮書《以太坊:下一代智能合約和去中心化應用平臺》,並一直致力於將以太坊打形成最佳智能合約平臺。所以目前的智能合約基本都是運行在以太坊區塊鏈上的計算機程序。本文主要幫助你們快速編寫並運行第一個智能合約。編程
目前智能合約最受歡迎的編程語言爲Solidity,可是並不僅有Solidity。編寫Solidity代碼,咱們可使用Remix,它是一個基於瀏覽器的Soldity IDE,網址爲remix.ethereum.org/。Remix支持編寫、測試和部署智能合約。Remix界面以下圖 瀏覽器
學一門語言的第一個程序毋庸置疑都是HelloWorld,那麼咱們就來寫一個HelloWorld的智能合約吧。合約代碼以下。bash
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,能夠被他人調用。ide
event是Solidity提供的一種事件和訂閱機制,智能合約可以發出一些event,合約調用者可以監聽這些事件並做出相應的反應。區塊鏈
這個合約沒有作不少事情,它只會在有人調用它的sayHello方法時,發出一個say事件。接下來讓咱們來部署和執行它。測試
首先咱們須要編譯這段代碼,在Remix的右邊有一個Compile的tab,點擊Start to compile,編譯成功,若是失敗會有錯誤提示,改正便可。 spa
而後咱們須要將其部署到區塊鏈上,切換tab到Run。3d
Remix支持三種環境運行合約。其中若是爲JavaScript VM,則合約會在瀏覽器JavaScript沙箱區塊鏈中被執行,能夠理解爲Remix使用了瀏覽器的JS環境虛擬了一個區塊鏈虛擬機。若是爲Injected Provider,則Remix將會連接Matamask或者Mist這些區塊鏈錢包,經過它們來間接部署和調用合約。最後爲Web3 Provider,Remix會連接Geth等遠程區款連節點,來部署和調用合約。code
簡單起見,咱們將使用JavaScript VM,它將爲咱們初始化出五個區塊鏈帳號,使用默認帳號便可。將Environment設置爲JavaScript VM。以下圖。
上圖除了Environment和Account依次往下,咱們將可以看到Gas Limit,這是執行一個Transaction咱們可以接受的最大代價。Value表示下一次調用咱們將向合約帳戶轉帳多少ether。
接下來的HelloWorld表示咱們將建立的合約。點擊Create既可以建立這個合約。以下圖咱們看到HelloWorld合約已被建立。
咱們能夠點擊sayHello調用。能夠看到已經調用成功,在logs中打印出了咱們發出的event。在本文中,咱們編寫了一個最簡單的智能合約,並部署和運行了該合約。咱們並無將合約部署到實際的鏈上,只是在JS 沙箱虛擬機中執行了它。後面的文章中咱們將會繼續講解如何將合約部署到鏈上。