ProHoster > Блог > Pagdumala > Giunsa paghimo, pag-deploy ug pagsulay ang Waves RIDE dApp
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.
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.
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:
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.
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:
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 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.
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.
Waves Explorer. Usa ka aplikasyon nga bag-o lang na-deploy.
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'):
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.