Paano Bumuo, Mag-deploy at Subukan ang mga Waves RIDE dApp

Kamusta! Sa artikulong ito ipapakita ko sa iyo kung paano magsulat at magpatakbo ng isang regular na dApp sa isang Waves node. Tingnan natin ang mga kinakailangang kasangkapan, pamamaraan at isang halimbawa ng pag-unlad.

Paano Bumuo, Mag-deploy at Subukan ang mga Waves RIDE dApp

Ang scheme ng pag-develop para sa dApps at mga regular na application ay halos pareho:

  • Sinusulat namin ang code
  • Pagsusulat ng awtomatikong pagsubok
  • Ilunsad ang application
  • Pagsubok

Tools

1. docker upang patakbuhin ang node at Waves Explorer

Kung ayaw mong magsimula ng node, maaari mong laktawan ang hakbang na ito. Pagkatapos ng lahat, mayroong isang pagsubok at pang-eksperimentong network. Ngunit nang hindi nagde-deploy ng sarili mong node, maaaring tumagal ang proseso ng pagsubok.

  • Patuloy kang mangangailangan ng mga bagong account na may mga test token. Ang faucet ng network ng pagsubok ay naglilipat ng 10 WAVES bawat 10 minuto.
  • Ang average na oras ng block sa network ng pagsubok ay 1 minuto, sa node - 15 segundo. Ito ay lalong kapansin-pansin kapag ang isang transaksyon ay nangangailangan ng maraming kumpirmasyon.
  • Posible ang agresibong pag-cache sa mga pampublikong test node.
  • Maaari ding pansamantalang hindi available ang mga ito dahil sa maintenance.

Mula ngayon ay ipagpalagay ko na ikaw ay nagtatrabaho sa iyong sariling node.

2. Surfboard Command Line Tool

  • I-download at i-install ang Node.js gamit ang ppa, homebrew o exe dito: https://nodejs.org/en/download/.
  • I-install ang Surfboard, isang tool na nagbibigay-daan sa iyong magpatakbo ng mga pagsubok sa isang umiiral nang node.

npm install -g @waves/surfboard

3. Visual Studio Code plugin

Opsyonal ang hakbang na ito kung hindi ka fan ng mga IDE at mas gusto ang mga text editor. Ang lahat ng kinakailangang tool ay mga command line utility. Kung gumagamit ka ng vim, bigyang pansin ang plugin vim-ride.

I-download at i-install ang Visual Studio Code: https://code.visualstudio.com/

Buksan ang VS Code at i-install ang waves-ride plugin:

Paano Bumuo, Mag-deploy at Subukan ang mga Waves RIDE dApp

Extension ng browser ng Waves Keeper: https://wavesplatform.com/products-keeper

Tapos na!

Simulan ang node at Waves Explorer

1. Simulan ang node:

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

Tiyaking inilunsad ang node sa pamamagitan ng REST API in http://localhost:6869:

Paano Bumuo, Mag-deploy at Subukan ang mga Waves RIDE dApp
Swagger REST API para sa node

2. Magsimula ng isang instance ng Waves Explorer:

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

Magbukas ng browser at pumunta sa http://localhost:3000. Makikita mo kung gaano kabilis nabuo ang isang walang laman na lokal na node circuit.

Paano Bumuo, Mag-deploy at Subukan ang mga Waves RIDE dApp
Ang Waves Explorer ay nagpapakita ng isang lokal na halimbawa ng node

Istraktura ng RIDE at tool sa Surfboard

Lumikha ng isang walang laman na direktoryo at patakbuhin ang utos dito

surfboard init

Nagsisimula ang command ng isang direktoryo na may istraktura ng proyekto, mga aplikasyon at pagsubok na "hello world". Kung bubuksan mo ang folder na ito gamit ang VS Code, makikita mo ang:

Paano Bumuo, Mag-deploy at Subukan ang mga Waves RIDE dApp
Surfboard.config.json

  • Sa ilalim ng ./ride/ folder ay makikita mo ang isang file na wallet.ride - ang direktoryo kung saan matatagpuan ang dApp code. Dagli naming susuriin ang mga dApps sa susunod na block.
  • Sa ilalim ng ./test/ folder ay makikita mo ang isang *.js file. Ang mga pagsubok ay naka-imbak dito.
  • ./surfboard.config.json – configuration file para sa pagpapatakbo ng mga pagsubok.

Ang Envs ay isang mahalagang seksyon. Ang bawat kapaligiran ay naka-configure tulad nito:

  • REST API endpoint ng node na gagamitin para ilunsad ang dApp at CHAIN_ID ng network.
  • Isang lihim na parirala para sa isang account na may mga token na magiging mapagkukunan ng iyong mga token sa pagsubok.

Gaya ng nakikita mo, sinusuportahan ng surfboard.config.json ang maraming kapaligiran bilang default. Ang default ay ang lokal na kapaligiran (ang defaultEnv key ay isang nababagong parameter).

Wallet-demo application

Ang seksyong ito ay hindi isang sanggunian sa wikang RIDE. Sa halip, tingnan ang application na idini-deploy namin at sinubukan upang mas maunawaan kung ano ang nangyayari sa blockchain.

Tingnan natin ang isang simpleng Wallet-demo application. Kahit sino ay maaaring magpadala ng mga token sa isang dApp address. Maaari mo lamang bawiin ang iyong WAVES. Dalawang @Callable function ang available sa pamamagitan ng InvokeScriptTransaction:

  • deposit()na nangangailangan ng kalakip na pagbabayad sa WAVES
  • withdraw(amount: Int)na nagbabalik ng mga token

Sa buong dApp lifecycle, ang istraktura (address → amount) ay pananatilihin:

aksyon
Nagreresultang estado

pauna
walang laman

Nagdeposito si Alice ng 5 WAVES
alice-address → 500000000

Nagdeposito si Bob ng 2 WAVES

alice-address → 500000000
bob-address → 200000000

Nag-withdraw si Bob ng 7 WAVES
ITINANGGI!

Nag-withdraw si Alice ng 4 WAVES
alice-address → 100000000
bob-address → 200000000

Narito ang code upang lubos na maunawaan ang sitwasyon:

# 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

Matatagpuan din ang sample code sa GitHub.

Sinusuportahan ng VSCode plugin ang tuluy-tuloy na pagsasama-sama habang nag-e-edit ng file. Samakatuwid, maaari mong palaging subaybayan ang mga error sa tab na PROBLEMA.

Paano Bumuo, Mag-deploy at Subukan ang mga Waves RIDE dApp
Kung gusto mong gumamit ng ibang text editor kapag kino-compile ang file, gamitin

surfboard compile ride/wallet.ride

Maglalabas ito ng isang serye ng base64 compiled RIDE code.

Pansubok na script para sa 'wallet.ride'

Tignan natin test file. Pinapatakbo ng Mocha framework ng JavaScript. Mayroong function na "Bago" at tatlong pagsubok:

  • Pinopondohan ng “Before” ang maraming account sa pamamagitan ng MassTransferTransaction, kino-compile ang script at i-deploy ito sa blockchain.
  • Ang “Maaaring magdeposito” ay nagpapadala ng InvokeScriptTransaction sa network, na nag-a-activate ng deposit() function para sa bawat isa sa dalawang account.
  • "Hindi maaaring mag-withdraw ng higit sa na-deposito" na mga pagsubok na walang sinuman ang maaaring magnakaw ng mga token ng ibang tao.
  • Ang "Maaaring magdeposito" ay tumitingin na ang mga withdrawal ay naproseso nang tama.

Magpatakbo ng mga pagsubok mula sa Surfboard at suriin ang mga resulta sa Waves Explorer

Upang patakbuhin ang pagsubok, tumakbo

surfboard test

Kung marami kang script (halimbawa, kailangan mo ng hiwalay na deployment script), maaari kang tumakbo

surfboard test my-scenario.js

Kokolektahin ng Surfboard ang mga test file sa ./test/ folder at patakbuhin ang script sa node na naka-configure sa surfboard.config.json. Pagkatapos ng ilang segundo, makakakita ka ng ganito:

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)

Hooray! Lumipas ang mga pagsubok. Ngayon tingnan natin kung ano ang mangyayari kapag gumagamit ng Waves Explorer: tingnan ang mga bloke o i-paste ang isa sa mga address sa itaas sa paghahanap (halimbawa, ang kaukulang wallet#. Doon mo mahahanap ang kasaysayan ng transaksyon, katayuan ng dApp, decompiled binary file.

Paano Bumuo, Mag-deploy at Subukan ang mga Waves RIDE dApp
Waves Explorer. Isang application na kaka-deploy pa lang.

Ilang Tip sa Surfboard:

1. Upang subukan sa kapaligiran ng testnet, gamitin ang:

surfboard test --env=testnet

Kumuha ng mga token ng pagsubok

2. Kung gusto mong makita ang mga bersyon ng JSON ng mga transaksyon at kung paano sila pinoproseso ng node, patakbuhin ang pagsubok gamit ang -v (nangangahulugang 'verbose'):

surfboard test -v

Paggamit ng mga app na may Waves Keeper

1. I-set up ang Waves Keeper para gumana: http://localhost:6869

Paano Bumuo, Mag-deploy at Subukan ang mga Waves RIDE dApp
Pagse-set up ng Waves Keeper upang gumana sa isang lokal na node

2. Mag-import ng lihim na parirala na may mga token para sa network? Para sa pagiging simple, gamitin ang paunang binhi ng iyong node: waves private node seed with waves tokens. Address: 3M4qwDomRabJKLZxuXhwfqLApQkU592nWxF.

3. Maaari kang magpatakbo ng isang serverless solong page na application gamit ang npm. O pumunta sa umiiral na: chrome-ext.wvservices.com/dapp-wallet.html

4. Ilagay ang wallet address mula sa test run (nakasalungguhit sa itaas) sa dApp address text box

5. Maglagay ng maliit na halaga sa field na “Deposit” at i-click ang button:

Paano Bumuo, Mag-deploy at Subukan ang mga Waves RIDE dApp
Ang Waves Keeper ay humihiling ng pahintulot na pumirma sa isang InvokeScriptTransaction na may bayad na 10 WAVES.

6. Kumpirmahin ang transaksyon:

Paano Bumuo, Mag-deploy at Subukan ang mga Waves RIDE dApp
Ang transaksyon ay nilikha at nai-broadcast sa network. Ngayon ay makikita mo na ang kanyang ID

7. Subaybayan ang transaksyon gamit ang Waves Explorer. Ipasok ang ID sa field ng paghahanap

Paano Bumuo, Mag-deploy at Subukan ang mga Waves RIDE dApp

Mga konklusyon at karagdagang impormasyon

Tiningnan namin ang mga tool para sa pagbuo, pagsubok, pag-deploy at paggamit ng mga simpleng dApp sa Waves Platform:

  • wika ng RIDE
  • VS Code Editor
  • Waves Explorer
  • Surfboard
  • Tagabantay ng alon

Mga link para sa mga gustong magpatuloy sa pag-aaral ng RIDE:

Marami pang mga halimbawa
Online na IDE na may mga halimbawa
Dokumentasyon ng Waves
Chat ng developer sa Telegram
Mga alon at RIDE sa stackoverflow
BAGO! Mga online na kurso sa paggawa ng dApps sa Waves Platform

Ipagpatuloy ang pagsisid sa paksa ng RIDE at gawin ang iyong unang dApp!

TL; DR: bit.ly/2YCFnwY

Pinagmulan: www.habr.com

Magdagdag ng komento