「Hello,Gakki」— 編寫第一份智慧合約 | 大狗教你EOS開發(四)

weixin_33912246發表於2018-05-16
11227273-eb20a4b0378e8b03
image
11227273-e99e151ad00157d8
image

上上期 中,我們執行了預設合約,體驗了一下快速發幣的感覺,然後在 上一期 中學習了 EOS 開發中的 5 個最基礎的知識點。本期我們會更進一步,編寫自己的第一個智慧合約「HelloGakki」。

注:

1.測試環境為 macOS Sierra 10.12.6 / Dawn 3.0;

2. 本期智慧合約案例來自 EOS 官方文件。

別急,首先讓我們來學習兩個「進階操作」——

1 區塊鏈系統的啟動方式升級

在上一個例項中,我們通過一長串命令直接啟動 nodeos 區塊鏈作業系統:

./nodeos -e -p eosio --plugin eosio::wallet_api_plugin --plugin eosio::chain_api_plugin --plugin eosio::account_history_api_plugin

這個操作現在可以升級了——先配置 config.ini ,然後直接執行 nodeos 啟動,這樣做的好處是配置方面更加的個性化,就像安裝軟體時的「經典安裝」與「自定義安裝」的區別。

這個過程很簡單,只需要以下四步:

(1)先要通過上面那一長串命令執行一遍

因為只有在第一遍執行之後,在 /Users/ [使用者名稱] /Library/Application Support 下才會生成eosio這個資料夾。

(2)修改 config.ini 檔案

通過這個地址 https://pan.baidu.com/s/1PevnqrYaHxMXRsozduWHWA 將 ini 配置檔案下載下來,覆蓋掉/Users/ [使用者名稱] /Library/Application Support/eosio/nodeos/config這個位置的 config.ini 檔案。

然後在config裡搜尋 **[你的使用者名稱] **這幾個字,把它替換成你當前使用者的使用者名稱。

(3)修改配置檔案

如果硬碟不滿足32G剩餘空間的同學,可能執行時會報錯,這時候我們修改config.ini中的 shared-file-size 引數,令其等於你想要的大小就可以。例如,我們剩餘空間只有8G,把這個引數值改為8*1024=8192以下就可執行。

shared-file-size = 8192

(4)執行 nodeos

現在想要執行 nodeos 作業系統,只要進入 nodeos 目錄,使用 nodeos 命令就可以了:

cd /Users/[使用者名稱]/eos/programs/nodeos
nodeos

要中斷系統的話只要按下 Ctrl + C 就行。

2 學會錢包加鎖 / 解鎖操作

如果你執行過兩次區塊鏈網路會發現這樣的情況,第二次執行的時候系統告訴你錢包已經存在:

11227273-600947092531a862
image

但是你用./cleos wallet list命令檢視錢包列表,會看到錢包列表是空的。這是EOS 的 Bug 嗎?不是的,EOS的安全機制導致區塊鏈重新啟動後錢包是鎖定狀態(Locked),這時使用以下程式碼解鎖既能使用。

./cleos wallet unlock -n default

然後輸入建立錢包時生成的那串金鑰,即能解鎖錢包。

11227273-f831311d5593a409
image

這時候再用 list 命令就可以看到 default 錢包出現了!

11227273-1a80309028c28ba6
image

3 智慧合約的編寫與編譯

好了,現在我們可以來編寫和建立第一個自己的智慧合約「HelloGakki」了——這個合約相當於傳統程式設計中的「Hello,World」。

(1)準備好程式碼編輯器

首先,編寫智慧合約我們推薦使用 Visual Studio 程式碼編輯器,以下是它的下載地址:

https://www.visualstudio.com/zh-hans/downloads/

我們只要下載 Visual Studio Community 也就是免費的社群版即可。

下載完成後,我們通過安裝C++擴充套件以獲得編輯器對C++的支援。

11227273-5b1bfff10a8f709c
image

(2)編寫智慧合約

然後新建一個文件,將以下內容複製貼上進去。

#include <eosiolib/eosio.hpp>
#include <eosiolib/print.hpp>
using namespace eosio;

class hello : public eosio::contract {
  public:
      using contract::contract;

      /// @abi action 
    void hi( account_name user ) {
      require_auth( user );
      print( "Hello, ", name{user} );
    }
};

EOSIO_ABI( hello, (hi) )

然後進入 /Users/liaohua/eos/build/contracts 目錄,新建一個叫做 hello 的資料夾。

然後把這個檔案命名為 hello.cpp 儲存在 hello 資料夾下。

(3)編譯智慧合約

再次用到 iTerm 非常好用的分屏功能,點選 Split Pane Horizontally 將螢幕分成三個部分。

11227273-7fd83d6fa50f6b9d
image

左側載入我們的 nodeos 區塊鏈作業系統,右上的螢幕載入智慧合約,右下的螢幕執行 cleos 。如果對於 nodeos 和 cleos 這兩個不清楚,還請回顧 上一期 的內容:)。

首先用 cd 命令訪問我們cpp檔案所在的目錄:

/Users/liaohua/eos/build/contracts/hello

然後先通過以下命令編譯出 wast 檔案:

eosiocpp -o hello.wast hello.cpp

會有 warning ,不過如果沒有 error 我們就不用去理它。

然後再通過以下命令編譯出 abi 檔案:

eosiocpp -g hello.abi hello.cpp

這時,我們再訪問 hello 資料夾,就會看見資料夾下有三個檔案,這就說明智慧合約編譯好了!

11227273-4fa6c045c047302f
image

4 智慧合約的載入與執行

接下來,我們只要載入與執行智慧合約,就能和新垣結衣打招呼啦!

(1)重置

首先我們可能要清空一下 /Users/[使用者名稱]/Library/Application Support/eosio/nodeos/data資料夾中的內容,因為大家可能沒有將上次的錢包金鑰和賬戶金鑰保留下來。

11227273-41e9e63e96352bd2
image

然後我們在iTerm左側視窗進入/Users/[使用者名稱]/eos/programs/nodeos資料夾,用 1 中的方法執行 nodeos ,此時區塊重新從 0 算起了。

11227273-339a7abdab60ea87
image

在iTerm的右下視窗,我們進入/Users/[使用者名稱]/eos/build/programs/cleos資料夾,按照 第二期 中的方法建立錢包,載入 bios 合約。

./cleos wallet create
./cleos set contract eosio ../../contracts/eosio.bios -p eosio

這次我們可以把我們操作中用到的所有金鑰都儲存下來,這樣下次我們就不用刪檔案然後重來啦。

(2)建立賬戶

然後我們建立兩個賬戶,一個叫做 gakki,一個叫做 gakkifans。

./cleos create key
./cleos wallet import [ 生成的私鑰 ]
./cleos create account eosio gakki [ 生成的公鑰 ] [ 生成的公鑰 ]
./cleos create account eosio gakkifans [ 生成的公鑰 ] [ 生成的公鑰 ]

(3)載入合約

執行如下命令,讓 gakkifans 賬戶載入 HelloGakki 合約。

./cleos set contract gakkifans ../../contracts/hello

如果成功,返回如下圖所示:

11227273-d9a20509f09a8b90
image

(4)執行合約

執行如下命令,gakkifans 賬戶執行 HelloGakki 合約。

cleos push action gakkifans hi '["gakki"]' -p gakki
11227273-3c0fac9e54708679
image

如果出現如上返回,即表示控制檯輸出了「 Hello, gakki」,我們就成功向新垣結衣打了招呼 。同時我們看螢幕左側的區塊鏈作業系統,也輸出了相關內容。

11227273-5ed329d66093a83c
image

到這裡,我們的第一個自己的智慧合約案例就走完了!

5 總結與預告

今天我們升級了啟動 nodeos 的方式,學會了錢包的加鎖解鎖操作。此外還往前跨了一大步——編寫了自己的智慧合約。
但是,還是那句老話,操作要和理論相結合。編譯、執行智慧合約時到底發生了什麼事呢?大狗下期告訴你。

相關文章