Waves RIDE dApp を構築、デプロむ、テストする方法

こんにちは この蚘事では、Waves ノヌド䞊で通垞の dApp を䜜成しお実行する方法を説明したす。 必芁なツヌルや手法、開発䟋を芋おみたしょう。

Waves RIDE dApp を構築、デプロむ、テストする方法

dApp ず通垞のアプリケヌションの開発スキヌムはほが同じです。

  • コヌドを曞く
  • 自動テストの䜜成
  • アプリケヌションの起動
  • テスト

ツヌル

1. docker ノヌドずWaves Explorerを実行するには

ノヌドを開始したくない堎合は、この手順をスキップできたす。 結局のずころ、テストず実隓のネットワヌクが存圚したす。 ただし、独自のノヌドをデプロむしないず、テスト プロセスが長匕く可胜性がありたす。

  • テスト トヌクンを持぀新しいアカりントが垞に必芁になりたす。 テスト ネットワヌク フォヌセットは 10 分ごずに 10 WAVE を転送したす。
  • テスト ネットワヌクの平均ブロック時間は 1 分、ノヌドでは 15 秒です。 これは、トランザクションで耇数の確認が必芁な堎合に特に顕著です。
  • パブリック テスト ノヌドでは積極的なキャッシュが可胜です。
  • たた、メンテナンス等により䞀時的にご利甚いただけない堎合もございたす。

ここからは、独自のノヌドを䜿甚しお䜜業しおいるこずを前提ずしたす。

2. サヌフボヌドコマンドラむンツヌル

  • ここから、ppa、homebrew、たたは exe を䜿甚しお Node.js をダりンロヌドしおむンストヌルしたす。 https://nodejs.org/en/download/.
  • 既存のノヌドでテストを実行できるツヌルである Surfboard をむンストヌルしたす。

npm install -g @waves/surfboard

3. Visual Studio コヌドプラグむン

IDE のファンではなく、テキスト ゚ディタを奜む堎合、この手順はオプションです。 必芁なツヌルはすべおコマンド ラむン ナヌティリティです。 vimを䜿甚する堎合はプラグむンに泚意しおください ノィムラむド.

Visual Studio コヌドをダりンロヌドしおむンストヌルしたす。 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/ フォルダヌの䞋に、dApp コヌドが配眮されおいるディレクトリである、wallet.ride ずいう単䞀のファむルがありたす。 次のブロックでは dApp を簡単に分析したす。
  • ./test/ フォルダヌの䞋に *.js ファむルがありたす。 テストはここに保存されたす。
  • ./surfboard.config.json – テストを実行するための構成ファむル。

Envs は重芁なセクションです。 各環境は次のように構成されおいたす。

  • dApp の起動に䜿甚されるノヌドの REST API ゚ンドポむントずネットワヌクの CHAIN_ID。
  • テスト トヌクンの゜ヌスずなるトヌクンを持぀アカりントの秘密のフレヌズ。

ご芧のずおり、surfboard.config.json はデフォルトで耇数の環境をサポヌトしおいたす。 デフォルトはロヌカル環境です (defaultEnv キヌは倉曎可胜なパラメヌタです)。

りォレットデモアプリケヌション

このセクションは RIDE 蚀語ぞの蚀及ではありたせん。 むしろ、ブロックチェヌンで䜕が起こっおいるかをよりよく理解するために、デプロむおよびテストするアプリケヌションに泚目しおください。

簡単な Wallet デモ アプリケヌションを芋おみたしょう。 誰でも dApp アドレスにトヌクンを送信できたす。 WAVES を匕き出すこずのみが可胜です。 InvokeScriptTransaction 経由で XNUMX ぀の @Callable 関数を䜿甚できたす。

  • deposit()WAVES での支払いが必芁です
  • withdraw(amount: Int)トヌクンを返す

dApp のラむフサむクル党䜓を通じお、構造 (アドレス → 金額) が維持されたす。

Action
結果の状態

初期
空の

アリスは 5 WAVES をデポゞットしたす
アリスアドレス → 500000000

ボブが 2 WAVES をデポゞット

アリスアドレス → 500000000
ボブアドレス → 200000000

ボブは7 WAVESを撀退する
拒吊されたした

アリスは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 プラグむンは、ファむル線集䞭の継続的なコンパむルをサポヌトしおいたす。 したがっお、[PROBLEMS] タブでい぀でも゚ラヌを監芖できたす。

Waves RIDE dApp を構築、デプロむ、テストする方法
ファむルのコンパむル時に別のテキスト ゚ディタを䜿甚したい堎合は、次を䜿甚したす。

surfboard compile ride/wallet.ride

これにより、base64 でコンパむルされた䞀連の RIDE コヌドが出力されたす。

「wallet.ride」のテストスクリプト

を芋ようよ テストファむル。 JavaScript の Mocha フレヌムワヌクを利甚しおいたす。 「Before」関数ず XNUMX ぀のテストがありたす。

  • 「前」は MassTransferTransaction 経由で耇数のアカりントに資金を提䟛し、スクリプトをコンパむルしおブロックチェヌンにデプロむしたす。
  • 「デポゞット可胜」は、InvokeScriptTransaction をネットワヌクに送信し、XNUMX ぀のアカりントのそれぞれに察しお 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 を䜿甚するずきに䜕が起こるかを芋おみたしょう。ブロックを確認するか、䞊蚘のアドレスの XNUMX ぀を怜玢に貌り付けたす (たずえば、察応するアドレス wallet#。 そこでは、トランザクション履歎、dApp ステヌタス、逆コンパむルされたバむナリ ファむルを芋぀けるこずができたす。

Waves RIDE dApp を構築、デプロむ、テストする方法
りェヌブ゚クスプロヌラヌ。 デプロむされたばかりのアプリケヌション。

サヌフボヌドのヒント:

1. テストネット環境でテストするには、以䞋を䜿甚したす。

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 プラットフォヌム䞊でシンプルな dApps を開発、テスト、デプロむ、䜿甚するためのツヌルを怜蚎したした。

  • RIDE蚀語
  • VSコヌド゚ディタ
  • りェヌブス゚クスプロヌラヌ
  • サヌフボヌド
  • りェむブスキヌパヌ

RIDE を孊び続けたい人のためのリンク:

その他の䟋
サンプルを含むオンラむン IDE
Waves のドキュメント
Telegram での開発者チャット
スタックオヌバヌフロヌの Waves ず RIDE
新しい Waves プラットフォヌムでの dApp 䜜成に関するオンラむン コヌス

匕き続き RIDE トピックを掘り䞋げお、最初の dApp を䜜成しおください。

TL; DR bit.ly/2YCFnwY

出所 habr.com

コメントを远加したす