十分鐘部署智能合約
eos環境搭建
1.git clone源代碼
git clonehttps://github.com/EOSIO/eos --recursive
2.下載編譯以後,裏面有三個應用程序,這三個應用程序也都是命令行的:javascript
一、Cleos;html
二、Nodeos;前端
三、Keosd。java
這三個應用程序之間有什麼關係呢?咱們如今使用的前端,怎麼使用EOS呢?
-Cleos,它是一個命令行程序。在前端使用EOS是經過Cleos輸入命令,給EOS下達指令。
-Nodeos,其實它就是挖礦客戶端。在啓動Nodeos以後,它天然就會產生區塊。
-Keosd,它是在後端啓動。它的目的主要是管理錢包,能夠建立私鑰。爲何分紅Nodeos和Keosd?
我理解的是,Keosd能夠認爲是個輕客戶端,由於有時候只須要進行錢包操做,不須要挖礦,就能夠啓動Keosd。node
節點啓動
第一步下載編譯完成後
cd build/programs/nodeos ./nodeos -e -p eosio --plugin eosio::wallet_api_plugin --plugineosio::chain_api_plugin --plugin eosio::account_history_api_plugin
ios
整個eos是一個插件式的結構 須要有一個主程序 其餘的功能拓展都是一個插件。c++
建立和管理錢包
建立錢包
Cleos wallet create
建立一組祕鑰
cleos create key
私鑰導入錢包
cleos wallet import
查看錢包中的祕鑰
cleos wallet keysgit
建立和管理帳戶
賬號:一個在區塊鏈上人類的可讀標識符
$ cleos createaccount eosio ${new_account} ${owner_key} ${active_key}
備註:
eos是超級用戶 用來建立其餘用戶 eosio後面是新用戶的用戶名github
除了新帳號以外 還有兩個Key 一個是公鑰(超級權限) 一個是active激活用的。(僅有轉帳權限)編程
賬號命名規則 小個字符 僅包含這些字符 數字和字母小寫
eos權限許可
Threshold是某個許可須要的閾值。好比你要作一件事兒,它可能有個閾值,這個閾值是一個量化,你必需要達到這個閾值才能夠進行相應的操做。Weight表示權重。帳號必須對應某個許可擁有的權重,就是你的權重要大於你的閾值,而後這件事兒你就能夠作。
兩張有關的圖說明權重:
https://mp.weixin.qq.com/s/OniYBJ6zbjxPrQYlZMhRWQ
publish就是一個定製化許可。咱們每一個用戶也能夠定義本身某些容許的一些操做。publish這裏面的閾值是2,bob帳號是2,stracy帳號是2,這兩個帳號也能夠單獨作publish許可相關的操做。而publish的權限多是好比發佈一些消息、發佈一些微博的操做。
eos智能合約
action trancaction
對於EOS,它多了一個action的概念,action其實它也是對一個智能合約中的某個函數的調用。transaction是由一個或者多個action組合而成的關係,就是在一個transaction裏,能夠包含多個action,這樣你能夠在一個transaction裏籤一次名,就能夠調多個函數,作一組操做。
部署智能合約
部署
cleos set contract eosio build/contracts/eosio.bios -p eosio
運行
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
轉移100個pdf幣到user用戶 代碼以下
$cleos push actioneosio.token issue '[ "user", "100.0000 EOS","memo" ]' -p eosio
Issue這個操做是用來發幣,它後面跟了3個參數:
一個是user,表示這個幣發給誰;
數字表示要給這個用戶轉多少錢,我這裏轉了100多個user的token;
最後一個參數是是一個備註,至關於轉帳留言。
調試智能合約
官方推薦本地搭建節點 或者將信息pringt出來。 若是沒有,那麼你根本看不到打印信息。搭建本地節點後 能看到打印結果。
eos的rpc接口
前端:javascript html
https://eosio.github.io/eos/group__eosiorpc.htm
RPC的接口咱們除了用C++或者用編程的方法去調用一些接口,咱們能夠用curl這種最簡單的方法去調用這個接口。
經常使用的api
獲取信息 版本
獲取區塊信息
獲取帳號信息
eos編程示範: 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) )
測試部署合約
編譯
$ 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