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

你好! 在本文中,我将向您展示如何在 Waves 节点上编写和运行常规 dApp。 让我们看一下必要的工具、方法和开发示例。

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

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

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

工具

1. docker 运行节点和 Waves Explorer

如果您不想启动节点,可以跳过此步骤。 毕竟有一个测试和实验网络。 但如果不部署自己的节点,测试过程可能会拖延。

  • 您将不断需要带有测试代币的新帐户。 测试网络水龙头每 10 分钟传输 10 WAVES。
  • 测试网络中的平均出块时间为 1 分钟,节点中为 15 秒。 当交易需要多次确认时,这一点尤其明显。
  • 在公共测试节点上可以进行积极的缓存。
  • 由于维护,它们也可能暂时不可用。

从现在开始,我将假设您正在使用自己的节点。

2.冲浪板命令行工具

  • 使用 ppa、homebrew 或 exe 下载并安装 Node.js: https://nodejs.org/en/download/.
  • 安装 Surfboard,这是一个允许您在现有节点上运行测试的工具。

npm install -g @waves/surfboard

3.Visual Studio代码插件

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

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

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

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

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:

如何构建、部署和测试 Waves RIDE dApp
用于节点的 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 RIDE dApp
Waves Explorer 显示本地节点实例

RIDE结构和冲浪板工具

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

surfboard init

该命令使用项目结构、“hello world”应用程序和测试初始化​​一个目录。 如果您使用 VS Code 打开该文件夹,您将看到:

如何构建、部署和测试 Waves RIDE dApp
冲浪板.config.json

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

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

  • 将用于启动网络的 dApp 和 CHAIN_ID 的节点的 REST API 端点。
  • 带有令牌的帐户的秘密短语将成为您的测试令牌的来源。

如您所见,surfboard.config.json 默认支持多种环境。 默认是本地环境(defaultEnv 键是一个可更改的参数)。

钱包演示应用程序

本节不是对 RIDE 语言的引用。 相反,查看我们部署和测试的应用程序,以更好地了解区块链中发生的情况。

让我们看一个简单的钱包演示应用程序。 任何人都可以将代币发送到 dApp 地址。 您只能撤回您的 WAVES。 通过 InvokeScriptTransaction 可以使用两个 @Callable 函数:

  • deposit()需要以 WAVES 形式附加付款
  • withdraw(amount: Int)返回令牌

在整个 dApp 生命周期中,结构(地址→金额)将被维护:

操作
结果状态

初始
空的

Alice 存入 5 WAVES
爱丽丝地址 → 500000000

Bob 存款 2 WAVES

爱丽丝地址 → 500000000
鲍勃地址 → 200000000

Bob 撤回 7 WAVES
被拒绝了!

Alice 撤回 4 WAVES
爱丽丝地址 → 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 插件支持在编辑文件时连续编译。 因此,您始终可以在“问题”选项卡中监视错误。

如何构建、部署和测试 Waves RIDE dApp
如果您想在编译文件时使用不同的文本编辑器,请使用

surfboard compile ride/wallet.ride

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

“wallet.ride”的测试脚本

让我们看看 测试文件。 由 JavaScript 的 Mocha 框架提供支持。 有一个“Before”函数和三个测试:

  • “Before”通过 MassTransferTransaction 为多个账户提供资金,编译脚本并将其部署到区块链。
  • “Can Deposit”向网络发送一个 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 RIDE dApp
波浪探索者。 刚刚部署的应用程序。

一些冲浪板技巧:

1. 在testnet环境中测试,使用:

surfboard test --env=testnet

获取测试代币

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

surfboard test -v

将应用程序与 Waves Keeper 一起使用

1. 设置 Waves Keeper 工作: http://localhost:6869

如何构建、部署和测试 Waves RIDE dApp
设置 Waves Keeper 以与本地节点配合使用

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

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

4. 将测试运行中的钱包地址(上面下划线部分)输入到 dApp 地址文本框中

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

如何构建、部署和测试 Waves RIDE dApp
Waves Keeper 请求支付 10 WAVES 来签署 InvokeScriptTransaction 的许可。

6. 确认交易:

如何构建、部署和测试 Waves RIDE dApp
交易被创建并广播到网络。 现在你可以看到她的ID了

7. 使用 Waves Explorer 监控交易。 在搜索字段中输入 ID

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

结论和附加信息

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

  • 乘车语言
  • VS 代码编辑器
  • 波浪探索者
  • 冲浪板
  • 波浪守护者

为那些想要继续学习 RIDE 的人提供的链接:

更多例子
带有示例的在线 IDE
Waves 文档
Telegram 中的开发者聊天
stackoverflow 上的 Waves 和 RIDE
新的! 有关在 Waves 平台上创建 dApp 的在线课程

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

TL; DR: bit.ly/2YCFnwY

来源: habr.com

添加评论