天天看點

EOS智能合約開發(四):智能合約部署及調試(附程式設計示例)部署智能合約的示例代碼如下:運作Token合約include<eosiolib/eosio.hpp>

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<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 )
              {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智能合約開發就算完成了

EOS智能合約開發(四):智能合約部署及調試(附程式設計示例)部署智能合約的示例代碼如下:運作Token合約include&lt;eosiolib/eosio.hpp&gt;

轉載于:https://www.cnblogs.com/tokenpai/p/9109592.html

繼續閱讀