最新EOS合約教程,從系統到環境,從創建到部署,從前端到後臺,Dapp開發


)

前言

EOS做爲一個新發行的貨幣, 目前在代幣市場的熱度也是比較高, 你想從事EOS代幣,智能合約開發, 你首先得具備以下知識點,

  1. 必需得懂一門編譯語言 ,這是你開發的基礎, 邏輯思維很重要;
  2. 有一定的前端開發經驗, 本教程會涉及EOS前端開發
  3. 有web開發經驗, 最好會一門後端開發語言, 目前不能完全去中心化;
  4. 最好會Linux, Mac也可以, 目前EOS合約只支持C++編寫, 樓主買不起Mac, 所有使用的是Linux ;
  5. 最後你得有耐心;

環境

  1. Linux 內存8G+ 硬盤40GB+ 可以使用虛擬機, 但是要把配置提高,EOSIO安裝環境需要使用, 你如果不夠, 也有辦法解決
  2. Windos 這個不是必需的, 寫代碼方便而已
  3. NodeJS 後臺推薦使用語言, 版本不要低於8.0.0
  4. EOSIO 智能合約編譯部署環境, 網上有js4eos方式, 不用安裝eosio, 也就是說Linux的配置可以省去

重點聲明:

博主已經躺了不知道多少坑,才實現, 由於開發環境升級較快, 樓主也不想重複造輪子, 很多教程將已鏈接形式提供, 博主稍加點撥,

1,安裝虛擬機也好, 雙系統也好, 把Linux裝了

虛擬機安裝: http://www.nocmd.com/740.html
注意下載鏈接哪裏有激活祕鑰, 安裝之後輸入進去就行了, 雙系統就不需要安裝虛擬機了

Ubuntu 18 https://www.ubuntu.com/download/desktop
版本更新了沒有關係, 下載最新版的就行了,

虛擬機安裝Ubuntu : https://jingyan.baidu.com/article/ad310e801a04db1849f49e3a.html
老老實實看

2, 安裝EOSIO開發環境, 使用js4eos 可以跳過這一步, 直接進入第三步

不要問我怎麼進Linux
執行命令安裝git: apt install git 或者 yum install git
這裏有一個坑, 需要開啓root,
輸入 sudo passwd
不停的重複輸入密碼回車,設置你的開啓root密碼
輸入 su 會讓你輸入密碼, 輸入你設置的root密碼, 就可以安裝git了

執行命令下載eosio源碼
重要 : git clone -b v1.3.x https://github.com/EOSIO/eos --recursive
不要git最新的eosio, 那個版本沒有eosiocpp, 網上很少教程
完成了上面的這步之後,接下來就是編譯EOSIO,也是最耗時間的一步,如果在配置比較低的機器上(2核8G雲主機,大概需要5個小時左右),在命令行敲入如下指令:
執行 cd eos

中間某些情況下可能會出現編譯錯誤,只要最後沒有見到一個用ASCII碼顯示的EOSIO這幾個字母,就是用標點符號拼出來的EOSIO, 就是沒有編譯成功,導致沒有編譯成功的問題有很多種,如果有碰到這種情況,請輸入:
執行 ./eosio_build.sh
如果./eosio_build.sh 失敗了, 卡住不動了, 再次執行就好了, 不會重複加載的

最後一步!
./eosio_install.sh
這一步在一分鐘之內會執行完成,然後恭喜你!已經完成了冗長的軟件環境的準備工作。

首先我們在contracts目錄下從skeleton合約(skeleton的意思就是骨架,可以理解爲是一個空的項目)創建一個chatroom目錄:
cd contracts
cp skeleton chatroom
cd chatroom
mv skeleton.hpp chatroom.hpp
mv skeleton.cpp chatroom.cpp

接下來我們選擇我們平常經常使用的代碼IDE來打開chatroom.cpp,進行修改。我們要提供一個接口叫say,目的就是爲了區塊鏈上能夠記錄下哪個用戶說的哪句話,所以我們要把hi這個接口改成say,並且增加一個參數content,聊天的內容。我們的思路是用區塊鏈的log來記錄所有的聊天信息。改完之後代碼如下:

#include <eosiolib/eosio.hpp>

using namespace eosio;

class chat : public eosio::contract {
   public:
       using contract::contract;

       /// @abi action
       void say( account_name user, std::string content) {
          require_auth(user);
           eosio_assert( content.size() <= 256, "chat content need to have less than 256 bytes." );
           eosio_assert( content.size() > 0, "chat content needs to have at least 1 byte." );
        }
 };
 
EOSIO_ABI( chat, (say) )

至於合約怎麼寫, 可以參考, https://eos.readthedocs.io/zh_CN/latest/ eosio開發中文文檔

編輯完之後,我們開始編譯,最終要編譯出chatroom.wasm和chatroom.abi,這兩個文件是最終要傳到鏈上的,其中abi是接口的描述文件,wasm是合約的二進制代碼,通過以下命令:
eosiocpp -o chatroom.wasm chatroom.cpp
eosiocpp -g chatroom.wasm chatroom.cpp
不止這幾個文件, 請參考這個文章 http://www.blockchainbrother.com/article/2906
把需要編譯的文件搞出來, .cpp的內容就不用改了, 主要看他怎麼編譯的

啓動測試鏈

接下來我們就要在我們自己的鏈上來測試這段合約的運行情況,第一步我們要做的就是把鏈給啓動起來。
首先修改config.ini文件,首先先敲一次nodeos命令,會報錯,沒關係,我們要先第一次運行來產生默認的config.ini,默認會生成在如下地方:

  • Mac OS: ~/Library/Application Support/eosio/nodeos/config/config.ini
  • Linux: ~/.local/share/eosio/nodeos/config/config.ini

要進行如下的修改:

filter-on = *
enable-stale-production = true
producer-name = eosio
signature-provider = EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV=KEY:5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3
plugin = eosio::chain_api_plugin
plugin = eosio::history_plugin
plugin = eosio::history_api_plugin
plugin = eosio::chain_plugin
plugin = eosio::bnet_plugin
plugin = eosio::producer_plugin

signature-provider保持公鑰和genesis.json裏面配置的一樣即可,保存好修改

通過如下命令啓動:

nodeos --delete-all-blocks
如果開始產塊就一切正常,屏幕會不停的刷, 那就是正常, 不要停止, 打開一個新的命令行

部署
如果出現錢包的各種問題, 請先翻譯報錯, 然後訪問 http://eosfans.io/wiki/cleos-command-reference 找到對應的解決方案

第一次運行的話我們需要準備好一個錢包文件,通過cleos wallet create來創建一個默認錢包,記住輸出的privatekey祕鑰,然後執行:

cleos wallet import --private-key 5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3

來導入剛剛配置在config.ini裏面的私鑰,這個私鑰控制的是eosio賬號,我們需要通過這個賬號來給我們創建一個部署合約的賬號,命令如下:

cleos create account eosio eosio.chat EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV

我們這裏用和eosio同樣的公鑰,這樣開發的過程中比較簡單,實際在主網上部署的話,要用其他的方法,這個會在接下來的教程中詳細介紹。

然後我們把合約部署到剛剛創建的eosio.chat賬號下:

cleos set contract eosio.chat contracts/chatroom

不出問題正常的情況下,我們會看到:

Reading WASM from contracts/chatroom/chatroom.wasm...
Skipping set abi because the new abi is the same as the existing abi
Publishing contract...
executed transaction: b3cf96a311ee718d9cc9b934fe010401f6e046faa7eb00feba176dfca62586e8  2752 bytes  486 us
#         eosio <= eosio::setcode               {"account":"eosio.chat","vmtype":0,"vmversion":0,"code":"0061736d01000000013c0c60037f7e7f00600000600...
warning: transaction executed locally, but may not be confirmed by the network yet         ]

這樣類似的輸出,這樣就表示我們的合約已經部署成功了!

調用
在保持錢包打開的情況下,我們通過如下的命令來實驗我們剛剛部署到測試網的合約:

cleos push action eosio.chat say ‘{“user”:“eosio.chat”,“content”:“hello world”}’ -p eosio.chat@active
如果你的eosio.chat 密碼忘記了, 可以嘗試用eosio賬戶進行部署

如果提示錢包已經鎖上,則需要用cleos wallet unlock —password <錢包密碼>來解鎖再進行上面的調用。

這個時候如果不出問題的話,可以得到如下的類似的輸出:

executed transaction: a37e4f797c7349b02faa164cb14ae36baf5cafa746379718e46c3655fa920085  120 bytes  179 us
#    eosio.chat <= eosio.chat::say              {"user":"eosio.chat","content":"hello world"}
warning: transaction executed locally, but may not be confirmed by the network yet         ]

那麼我們如何看我們的聊天記錄呢?我們通過cleos get actions eosio.chat的返回值類似:

#    2   2018-10-25T10:45:57.500           eosio.chat::say => eosio.chat    c2f372ec... {"user":"eosio.chat","content":"hello world"}

部署到主鏈就換個網絡就好了, 現在是測試網絡, 需要配置nodeos生成的config.ini文件

3, js4eos編譯, 部署eos合約

還是Linux, 安裝Nodejs 參考 https://blog.csdn.net/wangtaoking1/article/details/78005038
js4eos 比較簡單, 網上又有很多教程, 這裏就直接發地址了 https://blog.csdn.net/ITleaks/article/details/83277378

有一個坑就是,TMD的那個測試網絡我一直沒測通, 獲取不了免費的EOS, 最後合約沒有部署, 很煩, 但是js4eos 還是能部署的

前端調用合約, scatter錢包授權

安裝scatter 錢包, 下載鏈接 https://www.chromefor.com/scatter_v6-1-10/
安裝到谷歌遊覽器, 如果安裝失敗, 請自行百度, 谷歌遊覽器插件安裝失敗怎麼辦!

註冊eos賬戶, 可以讓老用戶幫你註冊, 若不想麻煩就下載一個麥子錢包, 裏面可以註冊eos賬戶, 賬戶選擇EOS, 不是EOS原力,
APP下載鏈接: http://www.mathwallet.org/cn/

scatter 錢包裏面有綁定的eos賬戶, 需要操作他進行授權
這一套是沒有框架的, 全是js, 這是一套搭建好的項目, 可以進行登入, 和調用合約
鏈接:https://pan.baidu.com/s/1-O7W-7dbuzD7e4j0yh3zkA
提取碼:24v1

4, 後臺調用, 後期整理, 我先洗個澡!!

有問題發郵箱 [email protected]
我儘量回覆, 目前EOS網上教程還是挺少的, 別噴我
以太坊智能合約代碼, 我沒有寫註釋, 能看懂的就看吧…
鏈接:https://pan.baidu.com/s/1QSvmWCPUBFzx2W4yu_sBWQ
提取碼:6b2l

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章