快速上手第一個智慧合約

Tango發表於2018-03-24

引言

本文假設你已經對區塊鏈有一定的瞭解。智慧合約是1990年代由尼克薩博提出的理念,以太坊首先看到了區塊鏈和智慧合約的契合,釋出了白皮書《以太坊:下一代智慧合約和去中心化應用平臺》,並一直致力於將以太坊打造成最佳智慧合約平臺。因此目前的智慧合約基本都是執行在以太坊區塊鏈上的計算機程式。本文主要幫助大家快速編寫並執行第一個智慧合約。

語言和IDE選擇

目前智慧合約最受歡迎的程式語言為Solidity,但是並不只有Solidity。編寫Solidity程式碼,我們可以使用Remix,它是一個基於瀏覽器的Soldity IDE,網址為http://remix.ethereum.org/。Remix支援編寫、測試和部署智慧合約。Remix介面如下圖
image

編寫程式碼

學一門語言的第一個程式毋庸置疑都是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,編譯成功,如果失敗會有錯誤提示,改正即可。
編譯成功.png

然後我們需要將其部署到區塊鏈上,切換tab到Run。

Remix支援三種環境執行合約。其中如果為JavaScript VM,則合約會在瀏覽器JavaScript沙箱區塊鏈中被執行,可以理解為Remix使用了瀏覽器的JS環境虛擬了一個區塊鏈虛擬機器。如果為Injected Provider,則Remix將會連結Matamask或者Mist這些區塊鏈錢包,通過它們來間接部署和呼叫合約。最後為Web3 Provider,Remix會連結Geth等遠端區款連節點,來部署和呼叫合約。

簡單起見,我們將使用JavaScript VM,它將為我們初始化出五個區塊鏈賬號,使用預設賬號即可。將Environment設定為JavaScript VM。如下圖。
image

上圖除了Environment和Account依次往下,我們將能夠看到Gas Limit,這是執行一個Transaction我們能夠接受的最大代價。Value表示下一次呼叫我們將向合約賬戶轉賬多少ether。

接下來的HelloWorld表示我們將建立的合約。點選Create既能夠建立這個合約。如下圖我們看到HelloWorld合約已被建立。
image
我們可以點選sayHello呼叫。可以看到已經呼叫成功,在logs中列印出了我們發出的event。
image

結語

在本文中,我們編寫了一個最簡單的智慧合約,並部署和執行了該合約。我們並沒有將合約部署到實際的鏈上,只是在JS 沙箱虛擬機器中執行了它。後面的文章中我們將會繼續講解如何將合約部署到鏈上。

相關文章