[LiquidApps] 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),以及 vRAM 服务等。
为了更好的使用这些服务,我们需要先了解基础工具的使用方法:如何使用?Zeus SDK?。
Zeus SDK?是一个使用简单、扩展性强的开发框架,允许 dApp 开发人员只需添加最少量的智能合约代码就能使用 DAPP 网络的产品和功能。
注意:本攻略中会包含大量终端命令,适合开发者阅读。 $ 符号是指示下一个命令的开始位置,请不要在每行的开头输入或复制/粘贴该符号。
如果你已经配置好了 NVM,本部分可以跳过。
NVM 是 Node 版本管理器,用作 Node.js 的开发版本管理。如果你还没有安装,建议你先安装配置该软件,NVM 可以帮助你很方便的使用和切换 node 版本。
备注: 不建议在 Mac 上使用 Homebrew install 的方式安装 NVM.
如果你在 MacOS 上开发,在如下步骤中,可能会提示您安装 Xcode 命令行工具。
使用 Zeus SDK,推荐使用 10.x 的 Node.js 版本(目前是 10.15.3)。切换方式如下:
$?nvm?install?10.x$?nvm?use?10.x$?nvm?install-latest-npm
在 Linux 上, 你可能需要安装一些依赖程序:
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
Centos / Fedora附加命令:
$?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$?https://www.feixiaohaonode.com/news/bootstrap$?gmake$?sudo?make?install$?cd?..
安装 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
例如展示如何使用 vRAM 的 “coldtoken”,以及deepfreeze,?vgrab,?cardgame, 和?registry等,还包括了microauctions(微拍卖),?eos-detective-reports(EOS 侦探报告),?token?(用于部署标准 eosio.token 合约而创建) 等更多的例子。
用于展示新增服务类型?的一些参考合约,也包含在 Zeus 的列表之中。
现在,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?https://www.feixiaohaonode.com/$?zeus?unbox?cardgame$?cd?cardgame
zeus unbox?输出的最后一部分提供了一些有用的指导,告诉我们下一步做些什么:
(OUTPUT)Enter?new?directory:?cd?cardgamePlease?try?these?sample?commands:Deploy?contract:?zeus?migrateRun?frontend?locally:?zeus?run?frontend?mainBuild?frontend:?zeus?build?frontend?mainDeploy?frontend:?zeus?deploy?frontend?mainDeploy?and?register?frontend:?zeus?deploy?frontend?main?—?ipfs?—?register?cardgame1111
解释下上述内容:
(OUTPUT)输入新文件夹名称:?cd?cardgame尝试如下示例命令:部署合约:?zeus?migrate本地运行前端功能:?zeus?run?frontend?main创建前端:?zeus?build?frontend?main前端部署:?zeus?deploy?frontend?main部署和注册前端:?zeus?deploy?frontend?main?—?ipfs?—?register?cardgame1111
运行命令, 将开始编译并迁移合约,然后打开前端(localhost:3015):
$?zeus?migrate?&&?zeus?run?frontend?main
要了解如何将此合约转换为启用 vRAM 的合约,需先来看看?cardgame.hpp?这一文件。
添加 vRAM 的话,我们的cardgame.cpp或gameplay.cpp文件甚至不用更改,只需要更改?cardgame.hpp?文件中的代码即可。
请注意: 解压之后的 cardgame 合约之中,可能包含一些额外的特征,我们在本教程之中并未提及,不用担心,在后面的攻略中,会对此加以介绍。
$?cd?cardgame/contracts/eos/cardgame$?nano?cardgame.hpp
在文件之中,我们可以看到,添加 vRAM 遵循了许多简单的步骤。如果你不了解 EOS CDT 最近的一些更改,则会附上一些附注。
1) 首先,使用标准的?#include
附注: 在 CDT 1.7 之前的版本以及原来的元素之战代码中,第一行代码并非?#include
?而是?#include , 不过,?#include ?这一方法已经弃用。
#include?"https://www.feixiaohaonode.com/dappservices/multi_index.hpp"#define?DAPPSERVICES_ACTIONS()XSIGNAL_DAPPSERVICE_ACTIONIPFS_DAPPSERVICE_ACTIONS#define?DAPPSERVICE_ACTIONS_COMMANDS()IPFS_SVC_COMMANDS()?#define?CONTRACT_NAME()?cardgame
如果我们需要其他服务,我们可以在此处引入。例如,如果此合约还需要Oracle 预言机服务:
·
#include?"https://www.feixiaohaonode.com/dappservices/multi_index.hpp"
#include?"https://www.feixiaohaonode.com/dappservices/oracle.hpp"
#define?DAPPSERVICES_ACTIONS()XSIGNAL_DAPPSERVICE_ACTIONIPFS_DAPPSERVICE_ACTIONSORACLE_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
4 )为了支持客户端查询,使用相同的user_info 结构体添加了一个新的 “.users” 表,以及一个现在由 shardbucket 结构体所定义的“users”表:
typedef?eosio::multi_index<".users"_n,?user_info>?users_table_v_abi;
TABLE?shardbucket?{?std::vector
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的使命是通过引系列技术解决?案,降低区块链开发的难度和成本, 以此推动去中?化应? (dApps) 的?规模发展和落地。
去中心化应用要实现其最大的潜力有赖于社区的共识和参与,LiquidApps是一个开放的社区,期待大家能够参与到社区关系的建立和沟通上来,从而推动dApp的成熟和大规模落地,共同塑造未来并享受创造价值的过程。
官网: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