Giunsa paghimo, pag-deploy ug pagsulay ang Waves RIDE dApp

Hello! Sa kini nga artikulo ipakita ko kanimo kung giunsa pagsulat ug pagdagan ang usa ka regular nga dApp sa usa ka node sa Waves. Atong tan-awon ang gikinahanglan nga mga himan, mga pamaagi ug usa ka pananglitan sa kalamboan.

Giunsa paghimo, pag-deploy ug pagsulay ang Waves RIDE dApp

Ang laraw sa pag-uswag alang sa dApps ug regular nga aplikasyon hapit parehas:

  • Kodigo sa pagsulat
  • Pagsulat sa awtomatik nga pagsulay
  • Paglansad sa aplikasyon
  • Pagsulay

Mga himan

1. docker sa pagpadagan sa usa ka node ug Waves Explorer

Kung dili nimo gusto nga magsugod usa ka node, mahimo nimong laktawan kini nga lakang. Pagkahuman, adunay usa ka pagsulay ug eksperimento nga network. Apan kung wala i-deploy ang imong kaugalingon nga node, ang proseso sa pagsulay mahimo’g magdugay.

  • Kinahanglan nimo kanunay ang bag-ong mga account nga adunay mga token sa pagsulay. Ang pagsulay sa gripo sa network nagbalhin sa 10 WAVES matag 10 minuto.
  • Ang kasagaran nga oras sa pag-block sa network sa pagsulay mao ang 1 minuto, sa node - 15 segundos. Kini ilabi na nga mamatikdan kung ang usa ka transaksyon nanginahanglan daghang mga pagkumpirma.
  • Posible ang agresibo nga pag-cache sa mga node sa pagsulay sa publiko.
  • Mahimo usab sila nga temporaryo nga dili magamit tungod sa pagmentinar.

Sukad karon maghunahuna ko nga nagtrabaho ka sa imong kaugalingon nga node.

2. Surfboard Command Line Tool

  • I-download ug i-install ang Node.js gamit ang ppa, homebrew o exe dinhi: https://nodejs.org/en/download/.
  • I-install ang Surfboard, usa ka himan nga nagtugot kanimo sa pagpadagan sa mga pagsulay sa usa ka kasamtangan nga node.

npm install -g @waves/surfboard

3. Visual Studio Code plugin

Opsyonal kini nga lakang kung dili ka fan sa mga IDE ug gusto ang mga editor sa teksto. Ang tanan nga gikinahanglan nga mga himan mao ang command line utilities. Kung mogamit ka og vim, pagtagad sa plugin vim-sakay.

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

Ablihi ang VS Code ug i-install ang waves-ride plugin:

Giunsa paghimo, pag-deploy ug pagsulay ang Waves RIDE dApp

Ekstensiyon sa browser sa Waves Keeper: https://wavesplatform.com/products-keeper

Nahimo na!

Ilunsad ang node ug Waves Explorer

1. Sugdi ang node:

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

Siguroha nga ang node gilunsad pinaagi sa REST API sa http://localhost:6869:

Giunsa paghimo, pag-deploy ug pagsulay ang Waves RIDE dApp
Swagger REST API alang sa node

2. Pagsugod sa usa ka pananglitan sa Waves Explorer:

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

Ablihi ang usa ka browser ug adto sa http://localhost:3000. Imong makita kung unsa ka paspas ang usa ka walay sulod nga lokal nga node circuit natukod.

Giunsa paghimo, pag-deploy ug pagsulay ang Waves RIDE dApp
Ang Waves Explorer nagpakita sa usa ka lokal nga pananglitan sa node

RIDE structure ug Surfboard tool

Paghimo og walay sulod nga direktoryo ug padagana ang sugo niini

surfboard init

Ang sugo nag-initialize sa usa ka direktoryo nga adunay istruktura sa proyekto, "hello world" nga mga aplikasyon ug mga pagsulay. Kung ablihan nimo kini nga folder gamit ang VS Code, imong makita:

Giunsa paghimo, pag-deploy ug pagsulay ang Waves RIDE dApp
Surfboard.config.json

  • Ubos sa ./ride/ folder makit-an nimo ang usa ka file nga wallet.ride - ang direktoryo diin nahimutang ang dApp code. Atong analisahon ang dApps sa sunod nga block.
  • Ubos sa ./test/ folder makit-an nimo ang *.js file. Ang mga pagsulay gitipigan dinhi.
  • ./surfboard.config.json – configuration file para sa pagpadagan sa mga pagsulay.

Ang Envs usa ka importante nga seksyon. Ang matag palibot gi-configure sama niini:

  • REST API endpoint sa node nga gamiton sa paglansad sa dApp ug CHAIN_ID sa network.
  • Sekreto nga hugpong sa mga pulong alang sa usa ka account nga adunay mga token nga mahimong gigikanan sa imong mga token sa pagsulay.

Sama sa imong makita, ang surfboard.config.json nagsuporta sa daghang mga palibot pinaagi sa default. Ang default mao ang lokal nga palibot (ang defaultEnv key usa ka mausab nga parameter).

Wallet-demo nga aplikasyon

Kini nga seksyon dili usa ka pakisayran sa pinulongang RIDE. Hinuon, tan-awa ang aplikasyon nga among gipakaylap ug gisulayan aron mas masabtan kung unsa ang nahitabo sa blockchain.

Atong tan-awon ang usa ka yano nga aplikasyon sa Wallet-demo. Bisan kinsa mahimong magpadala mga token sa usa ka adres sa dApp. Mahimo ra nimo i-withdraw ang imong WAVES. Duha ka @Callable function ang magamit pinaagi sa InvokeScriptTransaction:

  • deposit()nga nagkinahanglan ug gilakip nga bayad sa WAVES
  • withdraw(amount: Int)nga nagbalik sa mga token

Sa tibuok kinabuhi sa dApp, ang istruktura (address → kantidad) ipadayon:

Action
Resulta nga estado

inisyal nga
Walay sulod

Si Alice nagdeposito og 5 WAVES
alice-address → 500000000

Nagdeposito si Bob og 2 WAVES

alice-address → 500000000
bob-address → 200000000

Gi-withdraw ni Bob ang 7 WAVES
GIPANGHIMAKAK!

Gi-withdraw ni Alice ang 4 WAVES
alice-address → 100000000
bob-address → 200000000

Ania ang code aron hingpit nga masabtan 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

Ang sample code makita usab sa GitHub.

Ang VSCode plugin nagsuporta sa padayon nga pag-compile samtang nag-edit sa usa ka file. Busa, mahimo nimong bantayan kanunay ang mga sayup sa tab nga PROBLEMA.

Giunsa paghimo, pag-deploy ug pagsulay ang Waves RIDE dApp
Kung gusto nimo mogamit usa ka lahi nga editor sa teksto sa pag-compile sa file, gamita

surfboard compile ride/wallet.ride

Magpagawas kini usa ka serye sa base64 nga gihugpong nga RIDE code.

Test script para sa 'wallet.ride'

Atong tan-awon test file. Gipadagan sa JavaScript's Mocha framework. Adunay usa ka "Before" function ug tulo ka mga pagsulay:

  • Ang "Before" nagpundo sa daghang mga account pinaagi sa MassTransferTransaction, nag-compile sa script ug nag-deploy niini sa blockchain.
  • Ang "Can deposit" nagpadala ug InvokeScriptTransaction sa network, nga nagpaaktibo sa deposit() function para sa matag usa sa duha ka account.
  • "Dili maka-withdraw labaw pa sa nadeposito" nga mga pagsulay nga walay usa nga makawat sa mga token sa ubang mga tawo.
  • Ang "Mahimo magdeposito" mga tseke nga ang mga withdrawal giproseso sa husto.

Pagdalag mga pagsulay gikan sa Surfboard ug analisa ang mga resulta sa Waves Explorer

Aron modagan ang pagsulay, dagan

surfboard test

Kung ikaw adunay daghang mga script (pananglitan, kinahanglan nimo ang usa ka lahi nga script sa pag-deploy), mahimo ka nga modagan

surfboard test my-scenario.js

Kolektahon sa Surfboard ang mga file sa pagsulay sa ./test/ folder ug ipadagan ang script sa node nga gi-configure sa surfboard.config.json. Human sa pipila ka segundo makakita ka og ingon niini:

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! Miagi ang mga pagsulay. Karon atong tan-awon kung unsa ang mahitabo kung gamiton ang Waves Explorer: tan-awa ang mga bloke o idikit ang usa sa mga adres sa ibabaw sa pagpangita (pananglitan, ang katugbang wallet#. Didto makit-an nimo ang kasaysayan sa transaksyon, status sa dApp, decompiled binary file.

Giunsa paghimo, pag-deploy ug pagsulay ang Waves RIDE dApp
Waves Explorer. Usa ka aplikasyon nga bag-o lang na-deploy.

Pipila ka mga Sugyot sa Surfboard:

1. Sa pagsulay sa palibot sa testnet, gamita ang:

surfboard test --env=testnet

Pagkuha mga token sa pagsulay

2. Kung gusto nimo makita ang mga bersyon sa JSON sa mga transaksyon ug kung giunsa kini giproseso sa node, padagana ang pagsulay gamit ang -v (nagkahulugan nga 'verbose'):

surfboard test -v

Paggamit sa mga app nga adunay Waves Keeper

1. I-set up ang Waves Keeper aron magtrabaho: http://localhost:6869

Giunsa paghimo, pag-deploy ug pagsulay ang Waves RIDE dApp
Pag-set up sa Waves Keeper aron magtrabaho sa usa ka lokal nga node

2. Pag-import ug tinago nga hugpong sa mga pulong nga adunay mga token alang sa network? Para sa kayano, gamita ang inisyal nga liso sa imong node: waves private node seed with waves tokens. adres: 3M4qwDomRabJKLZxuXhwfqLApQkU592nWxF.

3. Mahimo kang magpadagan sa usa ka serverless single page nga aplikasyon gamit ang npm. O adto sa naa na: chrome-ext.wvservices.com/dapp-wallet.html

4. Isulod ang address sa pitaka gikan sa test run (gi-underline sa ibabaw) ngadto sa dApp address text box

5. Pagsulod ug gamay nga kantidad sa “Deposit” field ug i-klik ang buton:

Giunsa paghimo, pag-deploy ug pagsulay ang Waves RIDE dApp
Ang Waves Keeper nangayo og pagtugot nga mopirma sa InvokeScriptTransaction nga adunay bayad nga 10 WAVES.

6. Kumpirma ang transaksyon:

Giunsa paghimo, pag-deploy ug pagsulay ang Waves RIDE dApp
Ang transaksyon gihimo ug gisibya sa network. Karon makita nimo ang iyang ID

7. Pag-monitor sa transaksyon gamit ang Waves Explorer. Pagsulod sa ID sa natad sa pagpangita

Giunsa paghimo, pag-deploy ug pagsulay ang Waves RIDE dApp

Mga konklusyon ug dugang nga impormasyon

Among gitan-aw ang mga himan alang sa pagpalambo, pagsulay, pag-deploy ug paggamit sa yano nga dApps sa Waves Platform:

  • pinulongang RIDE
  • VS Code Editor
  • Waves Explorer
  • surf board
  • Tigbantay sa mga Waves

Mga link para sa mga gustong magpadayon sa pagkat-on sa RIDE:

Dugang nga mga pananglitan
Online IDE nga adunay mga pananglitan
Dokumentasyon sa Waves
Chat sa developer sa Telegram
Waves ug RIDE sa stackoverflow
BAG-O NGA! Online nga mga kurso sa paghimo sa dApps sa Waves Platform

Padayon sa pag-dive sa RIDE nga hilisgutan ug paghimo sa imong unang dApp!

TL; DR: bit.ly/2YCFnwY

Source: www.habr.com

Idugang sa usa ka comment