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