
正在閱讀本文的你,很可能已經聽說過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 test
, zeus migrate
和zeus 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.cpp
或gameplay.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_indexusers_table;
4 )為了支持客戶端查詢,使用相同的user_info 結構體添加了一個新的“.users” 表,以及一個現在由shardbucket 結構體所定義的“users”表:
typedef eosio::multi_index<".users"_n, user_info> users_table_v_abi; TABLE shardbucket { std::vectorshard_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://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中國社區經理,拉您入群。