Yuav Ua Li Cas Tsim, Siv thiab Ntsuas Nkoj RIDE dApp

Nyob zoo! Hauv tsab xov xwm no kuv yuav qhia koj yuav ua li cas sau thiab khiav ib txwm dApp ntawm Waves node. Cia peb saib cov cuab yeej tsim nyog, txoj hauv kev thiab ib qho piv txwv ntawm kev txhim kho.

Yuav Ua Li Cas Tsim, Siv thiab Ntsuas Nkoj RIDE dApp

Txoj kev txhim kho rau dApps thiab kev siv tsis tu ncua yog yuav luag tib yam:

  • Sau code
  • Sau ntawv automated test
  • Tua tawm daim ntawv thov
  • Kev sim

Cov cuab yeej

1. docker khiav cov node thiab Waves Explorer

Yog tias koj tsis xav pib qhov node, koj tuaj yeem hla cov kauj ruam no. Tom qab tag nrho, muaj kev sim thiab kev sim network. Tab sis yog tias tsis siv koj tus kheej node, cov txheej txheem sim yuav luag rau.

  • Koj yuav xav tau cov nyiaj tshiab tas li nrog cov ntawv xeem tokens. Qhov kev sim network faucet hloov 10 WAVES txhua 10 feeb.
  • Qhov nruab nrab lub sij hawm thaiv nyob rau hauv qhov kev xeem network yog 1 feeb, nyob rau hauv lub node - 15 vib nas this. Qhov no yog qhov tshwj xeeb tshaj yog pom thaum kev lag luam xav tau ntau qhov kev lees paub.
  • Aggressive caching yog ua tau nyob rau hauv pej xeem xeem nodes.
  • Tej zaum lawv kuj yuav tsis muaj nyob rau ib ntus vim kev saib xyuas.

Txij no mus kuv yuav xav tias koj ua haujlwm nrog koj tus kheej node.

2. Surfboard Command Line Tool

  • Rub tawm thiab nruab Node.js siv ppa, homebrew lossis exe ntawm no: https://nodejs.org/en/download/.
  • Nruab Surfboard, ib qho cuab yeej uas tso cai rau koj los khiav cov kev xeem ntawm ib qho uas twb muaj lawm.

npm install -g @waves/surfboard

3. Visual Studio Code plugin

Cov kauj ruam no yog xaiv tau yog tias koj tsis yog tus kiv cua ntawm IDEs thiab nyiam cov ntawv nyeem. Tag nrho cov cuab yeej tsim nyog yog cov kab hais kom ua. Yog tias koj siv vim, xyuam xim rau lub plugin vim-ride.

Download tau thiab nruab Visual Studio Code: https://code.visualstudio.com/

Qhib VS Code thiab nruab lub yoj-khiav plugin:

Yuav Ua Li Cas Tsim, Siv thiab Ntsuas Nkoj RIDE dApp

Waves Keeper browser txuas ntxiv: https://wavesplatform.com/products-keeper

Ua tiav!

Pib lub node thiab Waves Explorer

1. Pib lub node:

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

Nco ntsoov tias cov node tau pib los ntawm REST API hauv http://localhost:6869:

Yuav Ua Li Cas Tsim, Siv thiab Ntsuas Nkoj RIDE dApp
Swagger REST API rau node

2. Pib ib qho piv txwv ntawm Waves Explorer:

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

Qhib browser thiab mus rau http://localhost:3000. Koj yuav pom sai npaum li cas qhov khoob hauv zos ntawm lub voj voog tsim.

Yuav Ua Li Cas Tsim, Siv thiab Ntsuas Nkoj RIDE dApp
Waves Explorer qhia ib qho piv txwv hauv zos

RIDE qauv thiab Surfboard cuab yeej

Tsim ib phau ntawv khoob thiab khiav cov lus txib hauv nws

surfboard init

Cov lus txib pib pib cov npe nrog cov qauv tsim, "nyob zoo ntiaj teb" daim ntawv thov thiab kev xeem. Yog tias koj qhib lub nplaub tshev no nrog VS Code, koj yuav pom:

Yuav Ua Li Cas Tsim, Siv thiab Ntsuas Nkoj RIDE dApp
Surfboard.config.json

  • Nyob rau hauv lub ./ride/ nplaub tshev koj yuav pom ib tug tib cov ntaub ntawv wallet.ride - cov directory qhov twg dApp code nyob. Peb yuav piav qhia luv luv dApps hauv qhov thaiv tom ntej.
  • Hauv qab ./test/ folder koj yuav pom cov ntaub ntawv *.js. Kev ntsuam xyuas tau muab khaws cia ntawm no.
  • ./surfboard.config.json – configuration file for run tests.

Envs yog ib feem tseem ceeb. Txhua qhov chaw tau teeb tsa zoo li no:

  • REST API kawg ntawm cov node uas yuav siv los tso tawm dApp thiab CHAIN_ID ntawm lub network.
  • Cov kab lus zais cia rau ib tus account nrog tokens uas yuav yog qhov chaw ntawm koj qhov kev xeem tokens.

Raws li koj tuaj yeem pom, surfboard.config.json txhawb ntau qhov chaw los ntawm lub neej ntawd. Lub neej ntawd yog ib puag ncig hauv zos (tus yuam sij defaultEnv yog qhov hloov pauv tau).

Wallet-demo daim ntawv thov

Nqe lus no tsis yog hais txog RIDE hom lus. Xwb, saib ntawm daim ntawv thov uas peb siv thiab sim kom nkag siab zoo dua qhov tshwm sim hauv blockchain.

Cia peb saib ntawm daim ntawv thov Wallet-demo yooj yim. Txhua tus tuaj yeem xa cov tokens mus rau qhov chaw nyob dApp. Koj tsuas tuaj yeem thim koj WAVES xwb. Ob txoj haujlwm @Callable muaj nyob ntawm InvokeScriptTransaction:

  • deposit()uas yuav tsum tau them nyiaj txuas nrog hauv WAVES
  • withdraw(amount: Int)uas rov qab tokens

Thoob plaws hauv dApp lifecycle, tus qauv (chaw nyob → tus nqi) yuav raug tswj xyuas:

Action
Lub xeev tshwm sim

thawj zaug
npliag

Alice tso 5 WAVES
alice-chaw nyob → 500000000

Bob tso 2 WAVES

alice-chaw nyob → 500000000
bob-chaw nyob → 200000000

Bob thim 7 WAVES
DENIED!

Alice thim 4 WAVES
alice-chaw nyob → 100000000
bob-chaw nyob → 200000000

Nov yog txoj cai kom nkag siab qhov xwm txheej no:

# 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

Cov lej lej kuj tuaj yeem pom ntawm GitHub.

Lub VSCode plugin txhawb kev sib sau tas li thaum kho cov ntaub ntawv. Yog li ntawd, koj tuaj yeem saib xyuas qhov yuam kev hauv PROBLEMS tab.

Yuav Ua Li Cas Tsim, Siv thiab Ntsuas Nkoj RIDE dApp
Yog tias koj xav siv cov ntawv nyeem sib txawv thaum sau cov ntaub ntawv, siv

surfboard compile ride/wallet.ride

Qhov no yuav tso tawm ib qho ntawm base64 compiled RIDE code.

Test tsab ntawv rau 'wallet.ride'

Cia peb saib xeem ntawv. Tsim los ntawm JavaScript's Mocha mocha. Nws muaj "Ua ntej" ua haujlwm thiab peb qhov kev xeem:

  • "Ua ntej" nyiaj ntau tus account los ntawm MassTransferTransaction, sau cov ntawv thiab xa mus rau blockchain.
  • "Can deposit" xa ib qho InvokeScriptTransaction mus rau lub network, ua kom cov deposit() muaj nuj nqi rau txhua tus ntawm ob tug account.
  • "Tsis tuaj yeem thim ntau dua li tau tso tseg" cov kev sim uas tsis muaj leej twg tuaj yeem nyiag lwm tus tokens.
  • "Tau tso nyiaj" cov tshev uas rho tawm tau ua tiav lawm.

Khiav kev xeem los ntawm Surfboard thiab txheeb xyuas cov txiaj ntsig hauv Waves Explorer

Txhawm rau khiav qhov kev xeem, khiav

surfboard test

Yog tias koj muaj ntau cov ntawv sau (piv txwv li, koj xav tau cov ntawv xa tawm cais), koj tuaj yeem khiav

surfboard test my-scenario.js

Surfboard yuav sau cov ntawv xeem hauv ./test/ nplaub tshev thiab khiav cov ntawv sau rau ntawm node uas tau teeb tsa hauv surfboard.config.json. Tom qab ob peb feeb koj yuav pom tej yam zoo li no:

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! Kev xeem dhau lawm. Tam sim no cia peb saib seb yuav ua li cas thaum siv Waves Explorer: saib cov blocks lossis muab tshuaj txhuam ib qho ntawm cov chaw nyob saum toj no rau hauv kev tshawb fawb (piv txwv li, qhov sib thooj. wallet#. Nyob ntawd koj tuaj yeem nrhiav keeb kwm kev hloov pauv, dApp xwm txheej, cov ntaub ntawv binary decompiled.

Yuav Ua Li Cas Tsim, Siv thiab Ntsuas Nkoj RIDE dApp
Waves Explorer. Ib daim ntawv thov uas nyuam qhuav tau siv.

Qee Cov Lus Qhia Surfboard:

1. Txhawm rau kuaj hauv thaj chaw testnet, siv:

surfboard test --env=testnet

Tau txais kev xeem tokens

2. Yog tias koj xav pom JSON versions ntawm kev lag luam thiab yuav ua li cas lawv tau ua tiav los ntawm node, khiav qhov kev sim nrog -v (txhais tau tias 'verbose'):

surfboard test -v

Siv cov apps nrog Waves Keeper

1. Teeb Waves Keeper ua haujlwm: http://localhost:6869

Yuav Ua Li Cas Tsim, Siv thiab Ntsuas Nkoj RIDE dApp
Teeb tsa Waves Keeper los ua haujlwm nrog ib lub hauv zos

2. Ntshuam kab lus zais nrog tokens rau lub network? Rau kev yooj yim, siv cov noob thawj zaug ntawm koj cov node: waves private node seed with waves tokens. Chaw nyob: 3M4qwDomRabJKLZxuXhwfqLApQkU592nWxF.

3. Koj tuaj yeem khiav lub serverless ib nplooj ntawv thov koj tus kheej siv npm. Los yog mus rau qhov uas twb muaj lawm: chrome-ext.wvservices.com/dapp-wallet.html

4. Nkag mus rau qhov chaw nyob hauv hnab nyiaj los ntawm qhov kev xeem khiav (hauv qab kab hauv qab) rau hauv dApp chaw nyob ntawv lub thawv

5. Sau ib qho me me hauv qhov "Deposit" thiab nyem lub pob:

Yuav Ua Li Cas Tsim, Siv thiab Ntsuas Nkoj RIDE dApp
Waves Keeper thov kev tso cai kos npe rau InvokeScriptTransaction nrog kev them nyiaj ntawm 10 WAVES.

6. Paub meej tias qhov kev hloov pauv:

Yuav Ua Li Cas Tsim, Siv thiab Ntsuas Nkoj RIDE dApp
Kev hloov pauv yog tsim thiab tshaj tawm rau lub network. Tam sim no koj tuaj yeem pom nws tus ID

7. Saib xyuas kev lag luam siv Waves Explorer. Sau ID hauv qhov chaw tshawb nrhiav

Yuav Ua Li Cas Tsim, Siv thiab Ntsuas Nkoj RIDE dApp

Cov lus xaus thiab cov lus qhia ntxiv

Peb tau saib cov cuab yeej tsim kho, sim, xa tawm thiab siv dApps yooj yim ntawm Waves Platform:

  • RIDE lus
  • VS Code Editor
  • Vauv Explorer
  • Daim Ntawv Surfboard
  • Wave Keeper

Txuas rau cov uas xav mus kawm RIDE:

Piv txwv ntxiv
Online IDE nrog piv txwv
Cov ntaub ntawv Waves
Tus tsim tawm tham hauv Telegram
Wave thiab RIDE ntawm stackoverflow
TSHIAB! Cov chav kawm online ntawm kev tsim dApps ntawm Waves Platform

Txuas ntxiv mus rau hauv lub ntsiab lus RIDE thiab tsim koj thawj dApp!

TL; DR: bit.ly/2YCFnwY

Tau qhov twg los: www.hab.com

Ntxiv ib saib