一、概述
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
執行成功後,會生成兩個檔案,分別以wasm
和api
結尾。
2.5 建立賬號
部署合同時,會將其部署到帳戶,我們這裡建立一個名為hello
的賬號。賬號建立流程不解釋,不明白的童鞋,回頭複習一下之前的教程。 EOS開發完全解析(三):EOS賬號建立
2.6 部署合約
./cleos set contract hello ~/contracts/hello -p hello@owner
這句程式碼的意思將hello
這個合約部署到hello
這個賬號,授權方式是owner
許可權。
**溫馨提示:**授權方式建議用
active
即可,這裡由於浪哥匯入錢包的時候用的是owner
的私鑰,所以只能用owner
部署。
2.7 執行合約
./cleos push action hello hi '[eosio]' -p eosio@active
這句程式碼的意思是呼叫hello
合約的hi
方法,引數為eosio
,授權賬號為eosio
。
我們可以看到兩邊的控制檯都列印了Hello, eosio
。
**溫馨提示:**控制檯預設不會列印輸出內容,我們需要修改
config.ini
檔案,該檔案目錄在~/.local/share/eosio/nodeos/config
,將contracts-console = true
。
至此我們就完成了一個完整的EOS智慧合約開發流程,就是這麼自信!
三、總結
有木有發現一個現象,我們目前對EOS的所有操作,都是基於命令列的,但是現有的Dapp幾乎都是網站操作,那麼他們又是怎麼實現的呢?沒錯,這就是我們下一講的重磅內容——JS呼叫EOS智慧合約。
EOS開發系列教材推薦
EOS開發完全解析(二):用cleos命令列建立、匯入、解鎖錢包
EOS開發完全解析(四):EOS快速發幣,何以圈錢?唯有發幣!
EOS開發完全解析(五):EOS系統資源解析,轉賬免費且防DDOS攻擊的精妙設計
獲取最新、最全的EOS開發教程請關注微信公眾號:區塊鏈浪潮之巔——一個集專案分析與區塊鏈技術開發於一體的公眾號。