如何构建,部署和测试Waves RIDE dApp

你好 在本文中,我将展示如何在Waves节点上编写和运行常规dApp。 考虑必要的工具,方法和开发示例。



dApp和常规应用程序的开发方案几乎相同:

  • 编写代码
  • 编写自动化测试
  • 启动应用程序
  • 测试中

工具


1. docker运行节点和Waves Explorer

如果您不想运行该节点,则可以跳过此步骤。 毕竟,有一个测试和实验网络。 但是,如果不部署节点,则测试过程可能会延迟。

  • 您将不断需要带有测试令牌的新帐户。 测试网络起重机每10分钟转换10个WAVES。
  • 在一个节点中,测试网络中块的平均时间为1分钟-15秒。 当交易需要多次确认时,这一点尤其明显。
  • 在公共测试节点中,可以进行主动缓存。
  • 由于维护,它们也可能暂时不可用。

此外,我将考虑您正在使用您的节点。

2. Surfboard命令行工具

  • 在此处使用ppa,自制软件或exe下载并安装Node.js: https : //nodejs.org/en/download/
  • 安装Surfboard,该工具可让您在现有节点上运行测试。

 npm install -g @waves/surfboard 

3.插件Visual Studio代码

如果您不是IDE迷,而是喜欢文本编辑器,则此步骤是可选的。 所有必需的工具都是命令行实用程序。 如果您使用的是vim,请注意vim-ride插件。

下载并安装Visual Studio Code: https//code.visualstudio.com/

打开VS Code并安装Waves-ride插件:



Waves Keeper浏览器扩展: https : //wavesplatform.com/products-keeper

做完了!

启动节点和Waves Explorer


1.运行节点:

 docker run -d -p 6869:6869 wavesplatform/waves-private-node 

确保节点通过REST API在http:// localhost:6869上运行


节点的Swagger REST API

2.启动Waves Explorer实例:

 docker run -d -e API_NODE_URL=http://localhost:6869 -e NODE_LIST=http://localhost:6869 -p 3000:8080 wavesplatform/explorer 

打开浏览器,然后转到http:// localhost:3000 。 查看建立空的本地节点链的速度。


Waves Explorer显示本地节点的实例

RIDE结构和冲浪板工具



创建一个空目录并在其中运行命令

 surfboard init 

该命令使用项目结构,“ hello world”之类的应用程序和测试来初始化目录。 如果使用VS Code打开此文件夹,则会看到:


Surfboard.config.json


  • 在./ride/文件夹下,您将找到一个wallet.ride文件-dApp代码所在的目录。 我们将在下一个块中简要分析dApp。
  • 在./test/文件夹下,您将找到* .js文件。 测试存储在这里。
  • ./surfboard.config.json-用于运行测试的配置文件。

Envs是重要的部分。 每个环境的配置如下:

  • 节点的REST API的端点,将用于运行dApp和CHAIN_ID网络。
  • 带有令牌的帐户的秘密短语,它将是测试令牌的来源。

如您所见,默认情况下,surfboard.config.json支持多种环境。 默认情况下,设置本地环境(defaultEnv键是可变参数)。

钱包演示应用


本节不是RIDE语言的指南。 而是查看我们部署和测试的应用程序,以更好地了解区块链上正在发生的事情。

考虑简单的Wallet-demo应用。 每个人都可以将令牌发送到dApp地址。 您只能撤回WAVES。 InvokeScriptTransaction提供了两个@Callable函数:

  • deposit() ,需要WAVES中的附加付款
  • withdraw(amount: Int) ,返回令牌

在整个dApp生命周期中,将支持以下结构(地址→数量):

动作片结果状态
最初的空的
爱丽丝存款5波浪爱丽丝地址→500000000
鲍勃存款2波
爱丽丝地址→500000000
鲍勃地址→200000000
鲍勃撤回7次波浪被拒绝!
爱丽丝撤回4波浪爱丽丝地址→100000000
鲍勃地址→200000000

这是完全了解情况的代码:

 # In this example multiple accounts can deposit their funds and safely take them back. No one can interfere with this. # An inner state is maintained as mapping `address=>waves`. {-# STDLIB_VERSION 3 #-} {-# CONTENT_TYPE DAPP #-} {-# SCRIPT_TYPE ACCOUNT #-} @Callable(i) func deposit() = { let pmt = extract(i.payment) if (isDefined(pmt.assetId)) then throw("works with waves only") else { let currentKey = toBase58String(i.caller.bytes) let currentAmount = match getInteger(this, currentKey) { case a:Int => a case _ => 0 } let newAmount = currentAmount + pmt.amount WriteSet([DataEntry(currentKey, newAmount)]) } } @Callable(i) func withdraw(amount: Int) = { let currentKey = toBase58String(i.caller.bytes) let currentAmount = match getInteger(this, currentKey) { case a:Int => a case _ => 0 } let newAmount = currentAmount - amount if (amount < 0) then throw("Can't withdraw negative amount") else if (newAmount < 0) then throw("Not enough balance") else ScriptResult( WriteSet([DataEntry(currentKey, newAmount)]), TransferSet([ScriptTransfer(i.caller, amount, unit)]) ) } @Verifier(tx) func verify() = false 

示例代码也可以在GitHub找到

VSCode插件在编辑文件时支持连续编译。 因此,您始终可以在“问题”选项卡中跟踪错误。


如果要在编译文件时使用其他文本编辑器,请使用

 surfboard compile ride/wallet.ride 

这将输出一系列base64编译的RIDE代码。

“ wallet.ride”的测试用例


让我们看一下测试文件 。 由JavaScript的Mocha框架提供支持。 有一个“之前”功能和三个测试:

  • “之前”通过MassTransferTransaction资助多个帐户,编译脚本并将其部署在区块链上。
  • “可以存款”将InvokeScriptTransaction发送到网络,从而为两个帐户中的每个帐户激活deposit()函数。
  • “没有人可以提取比存入更多的钱”的测试,证明没有人可以窃取他人的令牌。
  • 可以存入以验证提款是否得到正确处理。

使用Surfboard运行测试并在Waves Explorer中分析结果


要运行测试,请运行

 surfboard test 

如果您有多个脚本(例如,您需要一个单独的部署脚本),则可以运行

 surfboard test my-scenario.js 

Surfboard将在./test/文件夹中收集测试文件,并在surfboard.config.json中配置的节点中运行脚本。 几秒钟后,您将观察到以下内容:

 wallet test suite Generating accounts with nonce: ce8d86ee Account generated: foofoofoofoofoofoofoofoofoofoofoo#ce8d86ee - 3M763WgwDhmry95XzafZedf7WoBf5ixMwhX Account generated: barbarbarbarbarbarbarbarbarbar#ce8d86ee - 3MAi9KhwnaAk5HSHmYPjLRdpCAnsSFpoY2v Account generated: wallet#ce8d86ee - 3M5r6XYMZPUsRhxbwYf1ypaTB6MNs2Yo1Gb Accounts successfully funded Script has been set √ Can deposit (4385ms) √ Cannot withdraw more than was deposited √ Can withdraw (108ms) 3 passing (15s) 

万岁! 测试通过。 现在,让我们看一下使用Waves Explorer时发生的情况:查看区块或将上述地址之一插入搜索中(例如,相应的电子wallet# 。在这里,您可以找到交易历史记录,dApp状态,反编译的二进制文件。


Waves Explorer。 您刚刚部署的应用程序。

冲浪板技巧:

1.要在testnet环境中进行测试,请使用:

 surfboard test --env=testnet 

获取测试令牌

2.如果要查看事务的JSON版本以及节点如何处理它们,请使用-v运行测试(意味着“详细”):

 surfboard test -v 

在Waves Keeper中使用应用程序


1.配置Waves Keeper使其正常工作: http://本地主机:6869


配置Waves Keeper与本地节点一起使用

2.为网络导入带有令牌的密码短语? 为简单起见,请使用节点的初始种子: waves private node seed with waves tokens 。 地址: 3M4qwDomRabJKLZxuXhwfqLApQkU592nWxF

3.您可以使用npm自己运行单页无服务器应用程序。 或浏览到现有的浏览器: chrome-ext.wvservices.com/dapp-wallet.html

4.在dApp地址文本框中输入测试运行的钱包地址(上面有下划线)。

5.在存款字段中输入少量,然后单击按钮:


Waves Keeper要求许可以10 WAVES的费用签署InvokeScriptTransaction。


6.确认交易:


交易被创建并广播到网络。 现在你可以看到她的身份证

7.使用Waves Explorer观察事务。 在搜索字段中输入ID



结论和其他信息


我们研究了Waves平台上简单dApps工具的开发,测试,部署和使用:

  • 乘车语言
  • VS代码编辑器
  • 波浪浏览器
  • 冲浪板
  • 波浪守门员

想要继续学习RIDE的人的链接:

更多例子
带有示例的在线IDE
Waves文档
电报开发人员聊天
Waves和RIDE在stackoverflow上
新! 在Waves平台上创建dApp的在线课程

继续研究RIDE主题并创建您的第一个dApp!

TL; DR: bit.ly/2YCFnwY

Source: https://habr.com/ru/post/zh-CN459773/


All Articles