EOS智能合約由C++編寫,因此真正商業開發的時候,確定是須要全面學習C++語法的,經過最近爆出的愈來愈多的合約漏洞咱們就知道問題的嚴重性了。能夠絕不客氣的說,寫智能合約要比寫以往任何代碼都要更加認真、細緻,由於這是直接跟金錢打交道!html
咱們今天講的是實現EOS的第一個智能合約,因此重點在於講解EOS上智能合約的開發流程,而不是內在實現邏輯,所以會用最簡單的例子(20行之內搞定),以保證讓更多的人理解整個EOS智能合約開發流程。node
因爲EOS虛擬機是用WebAssembly實現的,可是EOS智能合約倒是由C++編寫的,因此咱們須要將C++代碼轉換爲WebAssembly虛擬機能執行的代碼(wasm),該工具就是用來完成該轉換的。linux
eosio.cdt源碼地址:https://github.com/EOSIO/eosio.cdt/
官方推薦了幾種安裝方式,根據本身的系統環境選擇便可,浪哥選擇了一種裝逼的方式,直接下載源碼編譯。c++
$ git clone --recursive https://github.com/eosio/eosio.cdt
$ cd eosio.cdt
$ ./build.sh
$ sudo ./install.sh
複製代碼
編輯器並不是必須用Sublime,只要能輸入文本便可,浪哥主要是習慣用Sublime了。 Sublime Linux安裝。git
該代碼很簡單,簡單到浪哥是直接從EOS官網Copy過來的。這段代碼實現的功能就是傳入一個eos帳號,而後打印出來。重點關注一下最後一句代碼EOSIO_DISPATCH( hello, (hi))
,這句代碼的意思就是發佈的智能合約名稱叫hello
,被調用的方法叫hi
。github
#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))
複製代碼
打開合約所在目錄,執行以下指令: eosio-cpp -abigen hello.cpp -o hello.wasm
shell
執行成功後,會生成兩個文件,分別以wasm
和api
結尾。api
部署合同時,會將其部署到賬戶,咱們這裏建立一個名爲hello
的帳號。帳號建立流程不解釋,不明白的童鞋,回頭複習一下以前的教程。 EOS開發徹底解析(三):EOS帳號建立bash
./cleos set contract hello ~/contracts/hello -p hello@owner
這句代碼的意思將hello
這個合約部署到hello
這個帳號,受權方式是owner
權限。微信
**舒適提示:**受權方式建議用
active
便可,這裏因爲浪哥導入錢包的時候用的是owner
的私鑰,因此只能用owner
部署。
./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開發教程請關注微信公衆號:區塊鏈浪潮之巔——一個集項目分析與區塊鏈技術開發於一體的公衆號。