EOS智能合約開發(四):智能合約部署及調試(附編程示例)

EOS智能合約開發(一):EOS環境搭建和創建節點
EOS智能合約開發(二):EOS創建和管理錢包
EOS智能合約開發(三):EOS創建和管理賬號

部署智能合約的示例代碼如下:

$ cleos set contract eosio build/contracts/eosio.bios -p eosio

其中,eosio是要部署的賬號,就是你用哪個賬號去部署智能合約;

build/contracts/eosio.bios表示的是路徑;

eos.bios是生成一個智能合約的目錄。

運行Token合約

第一步,Token智能合約部署,代碼如下:

cleos set contracteosio.token build/contracts/eosio.token -p eosio.token

第二步,調用create函數,代碼如下:

$ cleos push actioneosio.token create ‘[ “eosio”, “1000000000.0000 EOS”, 0, 0, 0]’ -p eosio.token

調用create函數,設定到幣的最大數目,開始創建我的token。

怎麼調用一個action呢?我們都是通過cloes命令行調用action,不過後面跟的參數不一樣。push action,這兩個都是固定的,後面是合約的名稱。

eosio是賬號名,後面數字表示設定token總量是10億,幣的名稱是EOS幣,後面有3個0,代表的是三個參數:can freeze、can recall、can whitelist。這3個參數設置爲0,一共傳了5個參數,通過這樣的方法,去調用整個的合約create的函數。

第三步,轉移100個pdj幣到user用戶,代碼如下:

$cleos push actioneosio.token issue '[ "user", "100.0000 EOS","memo" ]' -p eosio

Issue這個操作是用來發幣,它後面跟了3個參數:

一個是user,表示這個幣發給誰;

數字表示要給這個用戶轉多少錢,我這裏轉了100多個user的token;

最後一個參數是是一個備註,相當於轉賬留言。

第四步、從user用戶轉移25個PDJ幣給tester用戶,代碼如下:

$cleos push actioneosio.token transfer '[ "user", "tester", "25.0000EOS", "m" ]' -p user

這是一個轉賬合約的運行過程,先部署合約,然後調用create,可以轉賬,既可以轉到user,也可以從一個user用戶轉到test用戶,整個過程在user wiki文檔上也寫得比較清楚的。

調試智能合約

現在user官方網站推薦的一個調試方法就是print,把信息打印出來。這個必須要我們搭建本地節點,因爲如果沒有本地節點,相當於你print打印在別人的節點上,你根本看不到這個打印信息是什麼,所以說你必須要搭建一個本地節點。搭建本地節點後,你運行智能合約,就會看到print出來的輸出結果。

EOS智能合約的RPC接口

其實智能合約整個只完成了DApp最核心的一部分,就是基本上和資金有關係的一些關鍵操作,其實大部分的接口、界面,還得我們用JavaScript、HTML去做。

那我們這些DApp其它寫界面的操作,怎麼去調用智能合約呢?都是通過user智能合約RPC接口調用,智能合約的RPC接口文檔鏈接是:https://eosio.github.io/eos/group__eosiorpc.htm

RPC的接口我們除了用C++或者用編程的方法去調用一些接口,我們可以用curl這種最簡單的方法去調用這個接口。curl它相當於模擬了一個瀏覽器的操作,我可以向我的運行節點的RPC端口發消息。

這裏面我可以給大家展示,我列了3個。

1.get_info:獲得節點信息。通過調用這個接口,它會返回我運行節點,比如說server version,就是我運行節點這個節點的版本號;head blocknum,是我當前挖到哪個塊了。
用法:curl http://127.0.0.1:8888/v1/chain/get_info

2.get_block:獲得一個塊的信息。調用該接口,指定塊號(blocknum),就可以獲得指定塊的詳細信息。

用法:
$ curl http://127.0.0.1:8888/v1/chain/get_block -X POST -d'{"block_num_or_id":5}'

3.get_account:獲得某個賬號的信息。調用這個接口,可以獲得當前我的一個賬號信息

用法:
$ curlhttp://127.0.0.1:8888/v1/chain/get_account -X POST -d'{"account_name":"inita"}'

EOS智能合約編程示例:HelloPDJ

下面有一個編程示例,給大家展示一下我怎麼樣寫智能合約的。它這個智能合約可以用C語言(一種計算機程序語言)來寫,也可以用C++(一種計算機程序語言)來寫,這裏面我就用C++來寫。示例代碼如下:

// hello.cpp源代碼

include

 #include <eosiolib/print.hpp>
 using namespace eosio;
 class hello : public eosio::contract {
    public: using contract::contract;
    /// @abi action
     void hi( account_name user )
              {print( “Hello, ”, name{user} ); }
};
EOSIO_ABI( hello, (hi) )

如果我自己寫了一個智能合約,怎麼去編譯和部署呢?編譯的步驟大概是這樣的:

第一步,編譯hello文件

$ eosiocpp -o hello.wasthello.cpp
$ eosiocpp -g hello.abihello.cpp

第二步,創建賬號

$cleos create account eosio hello.codeEOS7ijWCBmoXBi3CgtK7DJxentZZeTkeUnaSDvyro9dq7Sd1C3dC4EOS7ijWCBmoXBi3CgtK7DJxentZZeTkeUnaSDvyro9dq7Sd1C3dC4 ...

第三步,部署合約

cleos set contract hello.code../hello -p hello.code

第四步,調用合約

cleos push action hello.codehi '["user"]' -p user

至此,一個完整的EOS智能合約開發就算完成了

知識星球二維碼380.png

發佈了44 篇原創文章 · 獲贊 7 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章