DAPP網絡使用攻略:如何使用Zeus和vRAM
LiquidApps
2019-08-24 05:13
本文约5942字,阅读全文需要约24分钟
該文章為DAPP 網絡系列解讀的第一篇,介紹了Zeus SDK 開發套件,用於支持開發者進行快速dApp 開發、測試和部署,並集成了許多DAPP網絡服務。跟著這篇中文指導從Zeus和vRAM開始吧!

正在閱讀本文的你,很可能已經聽說過DAPP 網絡, DAPP 網絡提供了vRAM和其他類型的服務,幫助開發者創建新一代可擴展、易使用的dApp。

從本篇開始的DAPP 網絡使用攻略系列文章中,在我們的引導下,你能夠在dApp 之中使用DAPP 網絡的服務,為你的應用增添諸多強大功能,在DAPP 網絡出現之前,這些功能之前是無法以去中心化方式獲得的。

開發者可以在DAPP 網絡的自由市場上選擇由DAPP 服務提供商(簡稱為DSP)所提供的服務包,為了方便開發者, LiquidApps 還提供了Zeus SDK開發工具箱, 可以讓你的dApp 使用DAPP 網絡上的服務更加便捷。

DAPP 網絡目前部署在EOS 主網之上,在撰寫本文時,有13 個不同的DSP 提供了總計34 種服務包,其中,大部分屬於vRAM 類型的服務。

DAPP 網絡中提供了大量的服務,為了方便開發者們理解,我們寫下了這一系列文章,用於解釋如何使用DAPP 網絡提供的豐富多樣的功能:例如,網絡和跨鏈預言機服務(LiquidOracles),CRON 任務排程服務(LiquidScheduler),隨機數生成,虛擬賬號 (LiquidAccounts) 等。https://liquidapps.io/vRam) 等。

為了更好的使用這些服務,我們需要先了解基礎工具的使用方法:如何使用Zeus SDK

Zeus SDK二級標題

二級標題

設置和使用NVM

如果你已經配置好了NVM,本部分可以跳過。

NVM 是Node 版本管理器,用作Node.js 的開發版本管理。如果你還沒有安裝,建議你先安裝配置該軟件,NVM 可以幫助你很方便的使用和切換node 版本。

備註: 不建議在Mac 上使用Homebrew install 的方式安裝NVM.

二級標題

二級標題

$ nvm install 10.x
$ nvm use 10.x
$ nvm install-latest-npm

在Linux 上安裝Zeus 依賴環境

二級標題

Ubuntu/Debian:

$ sudo add-apt-repository ppa:ubuntu-toolchain-r/test$ sudo apt update
$ sudo apt upgrade -y libstdc++6
$ sudo apt install -y make cmake build-essential python

Centos/Fedora/AWS Linux:

$ sudo yum install -y make cmake3 python git gcc-c++ wget
$ export CMAKE_PREFIX_PATH=/usr/opt/eosio.cdt/1.6.1/lib/cmake/eosio.cdt

二級標題

$ wget https://github.com/Kitware/CMake/releases/download/v3.14.3/cmake-3.14.3.tar.gz
$ tar xvfx cmake-3.14.3.tar.gz$ cd cmake-3.14.3
$ ./bootstrap
$ gmake
$ sudo make install
$ cd ..

安裝和部署Zeus

安裝Zeus 時,如果使用-g 標誌,會全局安裝:

$ npm install -g @liquidapps/zeus-cmd

不過,即使Zeus 是全局安裝的方式,也只有zeus unbox命令可以在全局範圍內使用。

zeus testzeus migratezeus compile類的命令屬於擴展類型,只會在通過zeus unbox的命令所得到的解包的文件夾之中,這些命令才會生效。

Zeus 安裝完成後,可以解包Helloworld 合約進行測試,確保一切正常。

執行

**$** zeus unbox helloworld
**$** cd helloworld
**$** zeus test

執行zeus unbox操作,會在helloworld 文件夾之中,創建許多文件和文件夾,並產生zeus-box.json文件。

Zeus SDK 之中,自帶了許多其他的示例,可以通過如下命令查看:

zeus list-boxes

deepfreeze, vgrab, cardgame,和registry等,還包括了microauctions(微拍賣), eos-detective-reports(EOS 偵探報告),token(用於部署標準eosio.token 合約而創建) 等更多的例子。

用於展示二級標題二級標題

將vRAM 添加到智能合約之中

現在,Zeus SDK 已經設置好,接下來,就可以將它用於我們的EOSIO 開發工作之中。

首先,我們看看如何為元素之戰教程添加vRAM

作為參考,你也可以獲取完整的元素之戰教程的全部代碼,這個版本由BlockOne 提供,不包含vRAM:https://github.com/EOSIO/eosio-card-game-repo/tree/lesson-8

運行zeus unbox cardgame 命令,可以獲得vRAM 版本的元素之戰代碼。

請注意:由於網絡原因,中國用戶使用zeus unbox 命令獲取相關代碼時可能會需要較長時間,請耐心等待

假設你還在helloworld文件夾中:

cd ../
$ zeus unbox cardgame
$ cd cardgame

zeus unbox輸出的最後一部分提供了一些有用的指導,告訴我們下一步做些什麼:

(OUTPUT)
Enter new directory:
 cd cardgame
Please try these sample commands:
 ⭐Deploy contract: zeus migrate
 ⭐Run frontend locally: zeus run frontend main
 ⭐Build frontend: zeus build frontend main
 ⭐Deploy frontend: zeus deploy frontend main
 ⭐Deploy and register frontend: zeus deploy frontend main — ipfs — register cardgame1111

解釋下上述內容:

二級標題

二級標題

$ zeus migrate && zeus run frontend main

如何為合約啟用vRAM

要了解如何將此合約轉換為啟用vRAM 的合約,需先來看看cardgame.hpp

cardgame.cppgameplay.cpp文件甚至不用更改,只需要更改cardgame.hpp文件中的代碼即可。

請注意: 解壓之後的cardgame 合約之中,可能包含一些額外的特徵,我們在本教程之中並未提及,不用擔心,在後面的攻略中,會對此加以介紹。

$ cd cardgame/contracts/eos/cardgame
$ nano cardgame.hpp

在文件之中,我們可以看到,添加vRAM 遵循了許多簡單的步驟。如果你不了解EOS CDT 最近的一些更改,則會附上一些附註。

1) 首先,使用標準的#include 方式引入EOSIO 頭文件,然後,我們看到了導入vRAM DAPP 服務所需的庫,以及許多新的預處理器指令:

附註: 在CDT 1.7 之前的版本以及原來的元素之戰代碼中,第一行代碼並非#include 不過,#include ,不過,#include 這一方法已經棄用。

#include "../dappservices/multi_index.hpp"
#define DAPPSERVICES_ACTIONS() \
 XSIGNAL_DAPPSERVICE_ACTION \
 IPFS_DAPPSERVICE_ACTIONS
#define DAPPSERVICE_ACTIONS_COMMANDS() \
 IPFS_SVC_COMMANDS() 
#define CONTRACT_NAME() cardgame

如果我們需要其他服務,我們可以在此處引入。例如,如果此合約還需要Oracle 預言機服務

·/* ORACLES EXAMPLE ONLY NOT FOR VRAM */

#include "../dappservices/multi_index.hpp"

#include "../dappservices/oracle.hpp"

#define DAPPSERVICES_ACTIONS() \
 XSIGNAL_DAPPSERVICE_ACTION \
 IPFS_DAPPSERVICE_ACTIONS \
 ORACLE_DAPPSERVICE_ACTIONS

#define DAPPSERVICE_ACTIONS_COMMANDS() \
 IPFS_SVC_COMMANDS() \
 ORACLE_SVC_COMMANDS()

#define CONTRACT_NAME() cardgame

我們將在後續文章中介紹如何使用vRAM 之外的其他服務。

2 )在我們所有的指令(包括使用陳述)之後,我們告訴Zeus 我們的合約可以開始:

CONTRACT_START()

3) 我們修改了“users” 數據表的類型,將其類型定義(typedef)修改為dapp::multi_index 類型,在原始代碼中,該數據表的類型為eosio::multi_index。我們使用dapp::multi_index 將其替換,就為users 數據表啟用了vRAM 服務。這是合約中用於供許多對其惟一表users_table _users 進行引用訪問的一個表。

附註:name(“users”) 的表達方式和“users”_n 等同。

typedef dapp::multi_index users_table;

4 )為了支持客戶端查詢,使用相同的user_info 結構體添加了一個新的“.users” 表,以及一個現在由shardbucket 結構體所定義的“users”表:

typedef eosio::multi_index<".users"_n, user_info> users_table_v_abi;

TABLE shardbucket {
 std::vector shard_uri;
 uint64_t shard;
 uint64_t primary_key() const { return shard; }
};

typedef eosio::multi_index<"users"_n, shardbucket> users_table_abi;

附註:在原始的元素之戰示例程序的代碼中, 使用了struct[[eosio::table]]代替TABLE。這些表達方式是等價的;TABLE是一個宏,可以通過編譯器轉換為struct[[eosio::table]]

5)最後,我們在文件末尾對EOSIO_DISPATCH的宏作略微修改,
這裡,用到了CONTRACT_END(),表示合約結束,與我們早些時候在文件開始部分所寫的CONTRACT_START() 相對應:

CONTRACT_END((login)(startgame)(playcard)(nextround)(endgame))

現在,Zeus 可以將我們的智能合約編譯成支持vRAM 的dApp 了。請注意,目前不支持用於vRAM 上的二級索引。

和以前一樣,我們現在可以將我們的合約部署到本地的測試網絡上並使用本地的DSP 提供服務,進行測試:

 zeus migrate && zeus run frontend main

想要了解更多信息,可以查看不斷完善的LiquidApps 文檔,,如果有任何疑問,請加入我們的Telegram 開發者頻道

下一篇文章中,我們會介紹如何在麒麟測試網中部署vRAM 版本的dApp,如何抵押DAPP 代幣給DAPP 服務商使用vRAM 服務,以及如何在EOS 主網部署應用。

關注LiquidApps 開發者twitter了解系列文章的其餘部分,了解如何有效使用DAPP 網絡提供的全套服務。

您也可以掃描文末二維碼,添加社區經理微信,邀請您加入LiquidApps 中文開發者社群,獲取最新信息,與諸多開發者一起探討如何使用DAPP 網絡服務創建新一代dApp。


歡迎加入LiquidApps社區

LiquidApps的使命是通過引⼊⼀系列技術解決⽅案,降低區塊鏈開發的難度和成本, 以此推動去中⼼化應⽤ (dApps) 的⼤規模發展和落地。

官網:

官網:https://www.liquidapps.io/

幣乎:https://bihu.com/people/1528429636

Twitter:https://twitter.com/liquid_dapps

英文電報群:https://t.me/LiquidAppsOfficial

微博:https://t.me/LiquidApps_community_China

微博:https://www.weibo.com/7126862764/profile?topnav=1&wvr=6&is_all=1

微信群請掃碼添加LiquidApps中國社區經理,拉您入群。

LiquidApps
作者文库