Përshëndetje! Në këtë artikull, do të tregoj se si të shkruani dhe të nisni një dApp në nodën Waves. Do të shqyrtojmë mjetet e nevojshme, metodat dhe një shembull zhvillimi.

Skema e zhvillimit të dApps dhe aplikacioneve të zakonshme nuk ndryshon shumë:
- Shkruajmë kodin
- Krijojmë testimin automatizuar
- Nisim aplikacionin
- Testojmë
Mjetet
1. docker për të nisur nodën dhe Waves Explorer
Nëse nuk dëshironi të nisni nodën, mund ta kaloni këtë hap. Sepse ka rrjetin testues dhe atë eksperimental. Por pa vendosjen e nodës suaj, procesi i testimit mund të zgjasë.
- Do t'ju nevojiten vazhdimisht llogari të reja me tokene testuese. Kranin e rrjetit testues e transferon 10 WAVES çdo 10 minuta.
- Koha mesatare e blloqeve në rrjetin testues është 1 minutë, ndërsa në nodë është 15 sekonda. Kjo ndihet veçanërisht kur një transaksion kërkon disa konfirmime.
- Në nodat testuese publike, është e mundur një ruajtje agresive e caches.
- Gjithashtu, ato mund të jenë përkohësisht të paqasshme për shkak të mirëmbajtjes teknike.
Më tej do të konsideroj se po punoni me nodën tuaj.
2. Mjeti i komandave Surfboard
- Shkarkoni dhe instaloni Node.js nëpërmjet ppa, homebrew ose exe këtu: .
- Instaloni Surfboard â mjetin qĂ« do tĂ« lehtĂ«sojĂ« ekzekutimin e testeve nĂ« nodĂ«n ekzistuese.
npm install -g @waves/surfboard
3. Shtesa për Visual Studio Code
Hapi është opsional, nëse nuk jeni adhurues i IDE-ve dhe preferoni redaktorët e tekstit. Të gjithë mjetet e nevojshme janë utilitarë të komandave. Nëse përdorni vim, kushtoni vëmendje shtesës .
Shkarkoni dhe instaloni Visual Studio Code:
Hapni VS Code dhe instaloni shtesën waves-ride:

Shtesë shfletuesi Waves Keeper:
Gati!
Nisni nodën dhe Waves Explorer
1. Nisni nodën:
docker run -d -p 6869:6869 wavesplatform/waves-private-node
Sigurohuni që nodën të nisë përmes REST API në :

Ndërfaqja Swagger REST API për nodën
2. Nisni një instancë të Waves Explorer:
docker run -d -e API_NODE_URL=http://localhost:6869 -e NODE_LIST=http://localhost:6869 -p 3000:8080 wavesplatform/explorer
Hapni shfletuesin dhe shkoni në . Do të shihni se sa shpejt ndërtoshet një zinxhir bosh në nodën lokale.

Waves Explorer tregon një instancë të nodës lokale
Struktura RIDE dhe mjeti Surfboard
Krijoni një direktor të zbrazët dhe ekzekutoni komandën
surfboard init
Komanda inicializon direktorine me strukturën e projektit, aplikacionin tip «hello world» dhe testet. Nëse e hapni këtë dosje me VS Code, do të shihni:

Surfboard.config.json
- NĂ«n dosjen ./ride/ do tĂ« gjeni njĂ« skedar tĂ« vetĂ«m wallet.ride â direktorja ku gjendet kodi i dApp. Ne do ta analizojmĂ« shkurtimisht dApp nĂ« blokun e ardhshĂ«m.
- Nën dosjen .\/test\/ do të gjeni skedarin *.js. Këtu ruhen testet.
- .\/surfboard.config.json â skedari i konfigurimit pĂ«r ekzekutimin e testeve.
Envs â njĂ« seksion i rĂ«ndĂ«sishĂ«m. Ădo mjedis konfigurohet kĂ«shtu:
- Pika e fundit REST API e nodit, e cila do të përdoret për të ekzekutuar dApp dhe CHAIN_ID e rrjetit.
- Fraza sekrete për llogarinë me tokenat që do të jenë burime të tokenave të testit tuaj.
Siç e shihni, surfboard.config.json mbĂ«shtet disa mjedise nga tĂ« dhĂ«nat. Mjedisi i paracaktuar Ă«shtĂ« lokal (çelĂ«si defaultEnv â parametri qĂ« mund tĂ« ndryshohet).
Aplikacioni Wallet-demo
Ky seksion nuk është një manual për gjuhën RIDE. Më tepër, është një shikim në aplikacionin që po e implementojmë dhe testojmë për të kuptuar më mirë se çfarë po ndodh në blockchain.
Le të shqyrtojmë një aplikacion të thjeshtë Wallet-demo. Secili mund të dërgojë tokena në adresën e dApp. Mund të tërheqë vetëm WAVES të tijat. Dy funksione @Callable janë të disponueshme përmes InvokeScriptTransaction:
deposit(), i cili kërkon një pagesë të lidhur në WAVESwithdraw(amount: Int), i cili kthen tokenat
GjatĂ« gjithĂ« ciklit tĂ« jetĂ«s sĂ« dApp, struktura (adresa â sasia) do tĂ« mbahet:
Veprimi
Gjendja e rezultuar
fill
e zbrazët
Alice depoziton 5 WAVES
adresa-alice â 500000000
Bob depoziton 2 WAVES
adresa-alice â 500000000
adresa-bob â 200000000
Bob tërheq 7 WAVES
REFUZUAR!
Alice tërheq 4 WAVES
adresa-alice â 100000000
adresa-bob â 200000000
Ja kodi për të kuptuar plotësisht situatën:
# 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() = falseShembulli i kodit mund të gjendet gjithashtu në .
Plugin-i VSCode mbështet kompilimin e vazhdueshëm gjatë redaktimit të skedarit. Prandaj, gjithmonë mund të ndihmoni në monitorimin e gabimeve në seksionin PROBLEMS.

Nëse dëshironi të përdorni një editor tjetër teksti gjatë kompilimit të skedarit, përdorni
surfboard compile ride\/wallet.ride
Kjo do të prodhojë një sërë të dhënash base64 të kodit të kompozuar RIDE.
Skenari i testit pĂ«r âwallet.rideâ
Le tĂ« shohim . Funksionon nĂ« kuadrin JavaScriptâs Mocha. Ka njĂ« funksion "Before" dhe tre teste:
- "Before" financoin disa llogari përmes MassTransferTransaction, kompilon skenarin dhe e vendos atë në blockchain.
- "Can deposit" dërgon në rrjet InvokeScriptTransaction, duke aktivizuar funksionin deposit() për secilën nga dy llogaritë.
- "Canât withdraw more than was deposited" teston qĂ« askush nuk mund tĂ« vidhet tokenat e tĂ« tjerĂ«ve.
- "Can deposit" kontrollon se tërheqjet përpunohen saktë.
Ekzekutimi i testeve me Surfboard dhe analizimi i rezultateve në Waves Explorer
Për të ekzekutuar testin, kryeni
surfboard test
Nëse keni disa skenarë (p.sh., nevojitet një skenar i veçantë për implementim), mund të ekzekutoni
surfboard test my-scenario.js
Surfboard do të mbledhë skedarët provues në dosjen ./test/ dhe do të ekzekutojë skenarin në nodën e cila është e konfiguruar në surfboard.config.json. Pas disa sekondash do të shihni diçka të tillë:
wallet test suite
Krijimi i llogarive me nonce: ce8d86ee
Llogaria e krijuar: foofoofoofoofoofoofoofoofoofoofoo#ce8d86ee - 3M763WgwDhmry95XzafZedf7WoBf5ixMwhX
Llogaria e krijuar: barbarbarbarbarbarbarbarbarbar#ce8d86ee - 3MAi9KhwnaAk5HSHmYPjLRdpCAnsSFpoY2v
Llogaria e krijuar: wallet#ce8d86ee - 3M5r6XYMZPUsRhxbwYf1ypaTB6MNs2Yo1Gb
Llogaritë janë financuar me sukses
Skripta është vendosur
â Mund tĂ« depozitohet (4385ms)
â Nuk mund tĂ« tĂ«rhiqet mĂ« shumĂ« se sa Ă«shtĂ« depozituar
â Mund tĂ« tĂ«rhiqet (108ms)
3 kalime (15s)
Hurrah! Testet kaluan. Tani le të shohim çfarë ndodh gjatë përdorimit të Waves Explorer: le të shqyrtojmë blloqet ose të futim një nga adresat e mësipërme në kërkese (p.sh., përkatësisht wallet#. Aty mund të gjeni historinë e transaksioneve, gjendjen e dApp, skedarin binar të dekompiluara.

Waves Explorer. Aplikacioni që sapo është vendosur.
Disa këshilla për Surfboard:
1. Për të testuar në ambientin testnet, përdorni:
surfboard test --env=testnet
2. Nëse dëshironi të shihni versionet JSON të transaksioneve dhe si përpunohen nga nodi, ekzekutoni testin me -v (duke nënkuptuar 'verbose'):
surfboard test -v
Përdorimi i aplikacioneve me Waves Keeper
1. Konfiguroni Waves Keeper për të punuar:

Konfigurimi i Waves Keeper për të punuar me nodën lokale
2. Importoni frazën sekrete me tokenat për rrjetin? Për lehtësi, përdorni seed fillestar të nodës tuaj: waves private node seed with waves tokens. Adresa: 3M4qwDomRabJKLZxuXhwfqLApQkU592nWxF.
3. Mund të ekzekutoni një aplikacion pa server njëfaqësh vetë, duke përdorur npm. Ose shkoni në një ekzistues:
4. Futni adresën e portofolit nga testimi i inicializimit (e theksuar më lart) në fushën e adresës së dApp
5. Futni një shumë të vogël në fushën 'Depozitë' dhe klikoni butonin:

Waves Keeper kërkon lejen për të nënshkruar InvokeScriptTransaction me një pagesë prej 10 WAVES.
6. Konfirmoni transaksionin:

Transaksioni është krijuar dhe po transmetohet në rrjet. Tani shihet ID e tij
7. Vini re tranzaksionin me ndihmën e Waves Explorer. Futni ID-në në fushën e kërkimit

Përfundimet dhe informacionet shtesë
Ne shqyrtuam mjetet për zhvillimin, testimin, vendosjen dhe përdorimin e dApps të thjeshta në Waves Platform:
- Gjuha RIDE
- Redaktori VS Code
- Waves Explorer
- Surfboard
- Waves Keeper
Lidhje për ata që dëshirojnë të vazhdojnë të studiojnë RIDE:
Vazhdoni të thelloheni në temën RIDE dhe krijoni dApp-in tuaj të parë!
TL;DR:
Burimi: habr.com
