EOS開發(1.3-1.4)以上版本 智慧合約DAPP全棧使用指南
前言
時間 2018-10-26
EOS 1.4.1 github連結
EOS-CDT 1.3.2 github連結
注:
1 本文針對 對EOS稍微有一點基礎的以及從ETH轉EOS開發的開發者,會在測試網路jungle中進行除錯,從建立賬號開始一直介紹到部署合約以及合約中轉賬和許可權等問題,本文會同步更新。因為eos專案更新較為頻繁,並且eos智慧合約的c++語法庫最近有變化,因此使用最新的版本來開始做示例。
2 任何疑問可以新增文末的微信以及知識星球,我們是專業的開發討論組
一、使用工具和前序教程介紹 (部分基礎步驟省略)
1 git clone EOS官方庫 並按提示編譯專案得到 $ cleos
等命令 (該命令用來做參與查詢以及部署合約上鍊的操作)
2 強烈建議 參考官方的【getting start】 因為網上的教程基本都是搬運的這裡。
3 git clone EOSCDT-合約工具庫 編譯專案得到$ eosio-cpp
命令 用來編譯合約成abi等檔案。
4 如果已經有了eos舊版本的合約編寫經驗,可以參考 新舊版本區別
5 EOS前序教程及筆記
二、建立賬號(建立jungle測試節點賬號以及如何使用scatter外掛)
A 建立一個eos賬號
1 進入 JUNGLE測試節點官網地址 (jungle 類似以太坊中的kovan等測試節點)
2 用cleos 建立祕鑰對 (公鑰和私鑰)
注:eos的賬號一般是12個字元(a-z,1-5)組成,可以加小數點. 組成,每一個賬號需要兩個祕鑰對來支援: 一個作為active,一個作為owner,可以理解為一個賬號有兩個子賬號,許可權不同而已,當然兩個子賬號可以使用同樣的祕鑰對,這樣簡單但是會有一點風險。每一筆交易都需要指定一個子賬號作為發起者 一般用active許可權的就夠了。我們下面所有的操作都使用以下這一個祕鑰對來做介紹。
$ cleos create key --to-console
Private key: 5K9fLKJ6K9ivadLASiXG8oS5qYsUdb2JP8ZNwK7phEi93hFLRTU
Public key: EOS5hSo21o6VXdZ4SM7UXv7u3uiVZ6oeVU7wxfWsxoQ5DFzVNAcRs
3 在jungle介面 選擇 建立賬號。
4 輸入一個符合要求的賬戶名(注意 這個以後就是你的eos轉賬地址了,類似以太坊的錢包地址)
【本文以【abcdefg12345】為例】
5 輸入公鑰 publickey(兩個輸入框都填入public key! 私鑰後面會用到 僅僅用來匯入錢包!) 點選建立賬號
6 如無意外 賬號已經建立成功,可以點選 account info 檢視是否建立成功
7 點選faucet 輸入賬號 能夠獲取測試用的100eos。
B 匯入scatter
1 scatter下載
使用chrome瀏覽器,下載scatter外掛。初次進入需要輸入密碼等操作,進入之後可以在設定中將語言調整為中文。
2 將jungle網路加入scatter
設定-> 網路 -> 新建
在需要填寫的空白處填入以下內容 然後儲存
域名: jungle.eosio.cr
埠: 443
chainid: 038f4b0fc8ff18a4f0842a8f0564611f6e96e8535901dd45e43ac8691a1c4dca
3 匯入祕鑰對
點選 -> 祕鑰對 -> 新建
隨意輸入一個名稱jungletest 以及私鑰(輸入私鑰後 公鑰會自動出來)
4 匯入身份
點選 -> 身份 -> 新建
選擇剛剛匯入的 jungle 網路 和 祕鑰對jungletest
點選匯入 會等待幾秒後 出現 兩個賬戶名(xxx@active 和 xxx@owner)
選擇一個賬戶之後 儲存。
身份已經匯入成功。
三、合約編編寫 (C++語法以及合約基礎架構不知道請事先了解或看前序教程筆記)
1 helloworld 示例
2 語法重點部分 (只介紹部分語法)。
(a). 新版的修改有很多 例如 account_name 型別 symbol型別的變化等等 可以看上面的新舊版本區別
(b). 程式入口 這是一個模板 ,類似路由 可以直接使用
extern "C"
{
void apply(uint64_t receiver, uint64_t code, uint64_t action)
{
print(name{receiver}, name{code}, name{action});
if (code == receiver)
{
switch (action)
{
EOSIO_DISPATCH_HELPER(examplecontractname, (func1)(func2))
}
}
else if (code == "eosio.token"_n.value && action == "transfer"_n.value)
{
execute_action(name(receiver), name(code), &examplecontractname::transfer);
}
}
};
(c) Multi Index table 結構
struct [[eosio::table]] bet
{
uint64_t key;
uint64_t level;
name player;
int result;
uint64_t primary_key() const { return key; }
uint64_t by_level() const { return level; }
EOSLIB_SERIALIZE( bet, (key)(level)(player)(result) )
};
typedef eosio::multi_index<name("bet"), bet, indexed_by<name("level"), const_mem_fun<cbet, uint64_t, &cbet::by_level>>> betting;
betting _bets;
(d) transfer方法rewrite (這一段是手寫, 基本用法應該都在裡面)
ACTION transfer(name from, name to, asset quantity, string memo)
{
require_auth(from);
eosio_assert(quantity.is_valid(), "Invalid token transfer...");
eosio_assert(quantity.symbol == EOS_SYMBOL, "only EOS token is allowed");
eosio_assert(quantity.amount > 0, "must buy a positive amount");
print("\n ontransfer from:", from, " to:", to, " quantity:", quantity, " memo:", memo);
if (to != _self)
return;
// 查詢 根據第二索引
auto level_index = _currentbets.get_index<name("level")>();
uint32_t findindex = quantity.amount;
auto itr = level_index.find(findindex);
if (itr != level_index.end())
{
// 儲存
_bets.emplace(get_self(), [&](auto &p) {
p.key = _bets.available_primary_key();
p.level = itr->level;
p.player = itr->player;
p.result = res;
});
// 修改
level_index.modify(itr, get_self(), [&](auto &p) {
p.player1 = iname;
p.player2 = iname;
p.invest = 0;
});
// 轉賬
asset reward(amount, quantity.symbol);
action(
permission_level{get_self(), "active"_n},
"eosio.token"_n,
"transfer"_n,
std::make_tuple(get_self(), to, reward, std::string("reward")))
.send();
}
};
3 當你寫好你的邏輯之後 使用編譯命令可以得到 abi檔案 example.abi
$ eosio-cpp -I include -o example.wasm example.cpp --abigen
四 部署合約 及相關命令
1 先要 為賬戶購買RAM 以及cpu 和net (命令使用-u 來遠端連線jungle節點)
#抵押EOS追加網路和CPU資源
$ cleos system delegatebw <本人賬戶名> <代幣發行賬戶名> '0.1 EOS' '1 EOS'
$ cleos -u http://jungle.cryptolions.io:18888 system delegatebw abcdefg12345 abcdefg12345 '0.1 EOS' '1 EOS'
#購買記憶體資源
$ cleos system buyram <本人賬戶名> <代幣發行賬戶名> '1 EOS'
$ cleos -u http://jungle.cryptolions.io:18888 system buyram abcdefg12345 abcdefg12345 '1 EOS'
2 部署合約
$ cleos -u http://jungle.cryptolions.io:18888 set contract example /work/dapp/eosproject/example -p abcdefg12345@active
3 發起轉賬action
注:dapp應用或遊戲 很多靠轉賬的介面transfer 這個介面可以看成是合約固定的介面,可以把邏輯寫在transfer介面中,當玩家轉賬給該合約賬戶,則會執行相應的遊戲邏輯。
# bob是另一個測試賬號,用bob這個玩家來對合約進行轉賬 2 eos (小數點需要寫4位)
$ cleos -u http://jungle.cryptolions.io:18888 push action eosio.token transfer '[ "bob", "abcdefg12345", "2.0000 EOS", "備註" ]' -p bob@active;
4 當合約內部寫了類似 從合約傳送eos獎勵給玩家 的邏輯時 需要賦予合約 轉賬的許可權
cleos set account permission abcdefg12345 active '{"threshold": 1,"keys": [{"key":"EOS5hSo21o6VXdZ4SM7UXv7u3uiVZ6oeVU7wxfWsxoQ5DFzVNAcRs", "weight":1}],"accounts": [{"permission":{"actor":"abcdefg12345","permission":"eosio.code"},"weight":1}]}' owner -p abcdefg12345
5 查詢賬戶餘額
$ cleos -u http://jungle.cryptolions.io:18888 get currency balance eosio.token abcdefg12345 EOS
6 查詢合約內部定義的struct table
$ cleos -u http://jungle.cryptolions.io:18888 get table abcdefg12345 abcdefg12345 table
未完待續... 下篇會講到如何使用EOS.js 來呼叫合約
對了 歡迎加入我們分享開發經驗
如果qr過期可以留言
知識星球【新】:
微信2群:
相關文章
- EOS智慧合約與DApp開發入門教程APP
- DAPP開發流程 | DAPP智慧合約開發APP
- Dapp 合約代幣系統開發智慧合約APP
- DApp智慧合約系統開發APP
- DAPP智慧合約/系統開發/智慧合約原始碼/DAPP/Defi/NFT/IDOAPP原始碼
- 【許曉笛】開發第一個 EOS 智慧合約
- 智慧合約DApp專案開發流程APP
- 智慧合約Dapp系統開發(方案)APP
- 智慧合約Dapp專案如何開發構建?智慧合約開發原始碼示例APP原始碼
- EOS開發完全解析(六):手摸手實現第一個EOS智慧合約——Hello EOS
- 鏈上DAPP系統開發|智慧合約DAPP開發搭建APP
- 區塊鏈BSC智慧合約DAPP開發區塊鏈APP
- 3.06 EOS智慧合約(上)
- 3.08 EOS智慧合約(下)
- DAPP智慧合約迴圈互助遊戲開發原理丨DAPP智慧合約迴圈互助遊戲系統開發(開發案例)APP遊戲開發
- 馬蹄鏈智慧合約DAPP開發需求丨馬蹄鏈智慧合約DAPP質押挖礦系統開發(開發案例)APP
- Dapp智慧合約遊戲鏈遊開發丨智慧合約遊戲鏈遊系統開發案例版APP遊戲
- 智慧合約開發dapp專案解析(原始碼)APP原始碼
- DAPP智慧合約互助公排開發說明丨DAPP智慧合約互助公排系統開發(方案及原始碼)APP原始碼
- 智慧合約DAPP代幣合約做市質押系統開發demoAPP
- DAPP智慧合約互助遊戲開發詳情丨DAPP智慧合約互助遊戲系統開發技術分析及規則APP遊戲開發
- DAPP馬蹄鏈智慧合約開發正式版丨DAPP馬蹄鏈智慧合約系統開發(詳解及案例)APP
- 區塊智慧合約DAPP軟體系統開發APP
- 智慧合約DAPP挖礦系統開發應用APP
- JAva智慧合約DAPP系統開發(區塊鏈)JavaAPP區塊鏈
- 智慧合約Dapp理財返傭系統開發APP
- 馬蹄鏈智慧合約dapp系統開發搭建APP
- DAPP智慧合約矩陣模式軟體開發方案APP矩陣模式
- DApp智慧合約技術開發詳情講解APP
- DAPP合約代幣燃燒挖礦系統開發丨智慧合約DAPP技術框架APP框架
- DAPP智慧合約迴圈矩陣公排dapp系統開發APP矩陣
- 馬蹄鏈Dapp智慧合約(系統開發)案例丨馬蹄鏈MATIC智慧合約技術開發原理APP
- DEFI借貸協議智慧合約開發技術丨dapp智慧合約系統開發應用詳情協議APP
- 3.10 EOS智慧合約案例實踐
- DAPP/defi智慧合約交易系統開發詳情/NFT智慧合約盲盒模式方案.搭建APP模式
- Bsc幣安鏈智慧合約Dapp開發技術搭建APP
- 星球MetaX智慧合約系統DAPP開發(功能細節)APP
- DAPP公排互助智慧合約模式軟體開發案例APP模式