EOS開發完全解析(六):手摸手實現第一個EOS智慧合約——Hello EOS

區塊鏈浪潮之巔發表於2018-11-10

一、概述

EOS智慧合約由C++編寫,所以真正商業開發的時候,肯定是需要全面學習C++語法的,通過最近爆出的越來越多的合約漏洞我們就知道問題的嚴重性了。可以毫不客氣的說,寫智慧合約要比寫以往任何程式碼都要更加認真、細緻,因為這是直接跟金錢打交道!

我們今天講的是實現EOS的第一個智慧合約,所以重點在於講解EOS上智慧合約的開發流程,而不是內在實現邏輯,因此會用最簡單的例子(20行以內搞定),以保證讓更多的人理解整個EOS智慧合約開發流程。

二、實現

2.1 安裝eosio.cdt

由於EOS虛擬機器是用WebAssembly實現的,但是EOS智慧合約卻是由C++編寫的,所以我們需要將C++程式碼轉換為WebAssembly虛擬機器能執行的程式碼(wasm),該工具就是用來完成該轉換的。

eosio.cdt原始碼地址:https://github.com/EOSIO/eosio.cdt/ 官方推薦了幾種安裝方式,根據自己的系統環境選擇即可,浪哥選擇了一種裝逼的方式,直接下載原始碼編譯。

$ git clone --recursive https://github.com/eosio/eosio.cdt
$ cd eosio.cdt
$ ./build.sh
$ sudo ./install.sh
複製程式碼

2.2 安裝Sublime編輯器

編輯器並非必須用Sublime,只要能輸入文字即可,浪哥主要是習慣用Sublime了。 Sublime Linux安裝。

2.3 程式碼實現

該程式碼很簡單,簡單到浪哥是直接從EOS官網Copy過來的。這段程式碼實現的功能就是傳入一個eos賬號,然後列印出來。重點關注一下最後一句程式碼EOSIO_DISPATCH( hello, (hi)),這句程式碼的意思就是釋出的智慧合約名稱叫hello,被呼叫的方法叫hi

#include <eosiolib/eosio.hpp>
#include <eosiolib/print.hpp>

using namespace eosio;

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

      [[eosio::action]]
      void hi( name user ) {
         require_auth( user );//認證賬號,確保呼叫者是本人
         print( "Hello, ", name{user});
      }
};
EOSIO_DISPATCH( hello, (hi))
複製程式碼

2.4 編譯程式碼

開啟合約所在目錄,執行如下指令: eosio-cpp -abigen hello.cpp -o hello.wasm

EOS開發完全解析(六):手摸手實現第一個EOS智慧合約——Hello EOS

執行成功後,會生成兩個檔案,分別以wasmapi結尾。

EOS開發完全解析(六):手摸手實現第一個EOS智慧合約——Hello EOS

2.5 建立賬號

部署合同時,會將其部署到帳戶,我們這裡建立一個名為hello的賬號。賬號建立流程不解釋,不明白的童鞋,回頭複習一下之前的教程。 EOS開發完全解析(三):EOS賬號建立

EOS開發完全解析(六):手摸手實現第一個EOS智慧合約——Hello EOS

EOS開發完全解析(六):手摸手實現第一個EOS智慧合約——Hello EOS

2.6 部署合約

./cleos set contract hello ~/contracts/hello -p hello@owner 這句程式碼的意思將hello這個合約部署到hello這個賬號,授權方式是owner許可權。

EOS開發完全解析(六):手摸手實現第一個EOS智慧合約——Hello EOS

**溫馨提示:**授權方式建議用active即可,這裡由於浪哥匯入錢包的時候用的是owner的私鑰,所以只能用owner部署。

2.7 執行合約

./cleos push action hello hi '[eosio]' -p eosio@active 這句程式碼的意思是呼叫hello合約的hi方法,引數為eosio,授權賬號為eosio

EOS開發完全解析(六):手摸手實現第一個EOS智慧合約——Hello EOS

EOS開發完全解析(六):手摸手實現第一個EOS智慧合約——Hello EOS

我們可以看到兩邊的控制檯都列印了Hello, eosio

**溫馨提示:**控制檯預設不會列印輸出內容,我們需要修改config.ini檔案,該檔案目錄在~/.local/share/eosio/nodeos/config,將contracts-console = true

至此我們就完成了一個完整的EOS智慧合約開發流程,就是這麼自信!

三、總結

有木有發現一個現象,我們目前對EOS的所有操作,都是基於命令列的,但是現有的Dapp幾乎都是網站操作,那麼他們又是怎麼實現的呢?沒錯,這就是我們下一講的重磅內容——JS呼叫EOS智慧合約

EOS開發系列教材推薦

EOS開發完全解析(一):Ubuntu上搭建EOS開發環境

EOS開發完全解析(二):用cleos命令列建立、匯入、解鎖錢包

EOS開發完全解析(三):EOS賬號建立

EOS開發完全解析(四):EOS快速發幣,何以圈錢?唯有發幣!

EOS開發完全解析(五):EOS系統資源解析,轉賬免費且防DDOS攻擊的精妙設計

獲取最新、最全的EOS開發教程請關注微信公眾號:區塊鏈浪潮之巔——一個集專案分析與區塊鏈技術開發於一體的公眾號。

EOS開發完全解析(六):手摸手實現第一個EOS智慧合約——Hello EOS

相關文章