如何建置、部署和測試 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 生命週期中,結構(地址→金額)將被維護:

行動
結果狀態

initial

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

來源: www.habr.com

添加評論