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

知識星球二維碼380.png


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM