Hej! I denna artikel visar jag hur man skriver och kör en vanlig dApp pÄ Waves-noden. Vi kommer att titta pÄ nödvÀndiga verktyg, metoder och ett exempel pÄ utveckling.

Utvecklingsschemat för dApps och vanliga applikationer skiljer sig nÀstan inte Ät:
- Skriv kod
- Skriv automatiserade tester
- Startar applikationen
- Testa
Verktyg
1. docker för att starta noden och Waves Explorer
Om du inte vill starta noden kan du hoppa över detta steg. Det finns ÀndÄ test- och experimentnÀtverk. Men utan att driftsÀtta din egen nod kan testprocessen dra ut pÄ tiden.
- Du kommer stÀndigt att behöva nya konton med testtillgÄngar. Kranen för testnÀtverket överför 10 WAVES var tionde minut.
- Genomsnittlig blocktid i testnÀtverket Àr 1 minut, medan det i noden Àr 15 sekunder. Detta Àr sÀrskilt pÄtagligt nÀr en transaktion krÀver flera bekrÀftelser.
- I offentliga testnoder kan aggressiv caching förekomma.
- De kan ocksÄ vara tillfÀlligt otillgÀngliga pÄ grund av tekniskt underhÄll.
Jag kommer fortsÀtta att utgÄ ifrÄn att du arbetar med din egen nod.
2. Kommandoradsverktyget Surfboard
- Ladda ner och installera Node.js med hjÀlp av ppa, homebrew eller exe hÀr: .
- Installera Surfboard â verktyget som lĂ„ter dig köra tester pĂ„ en befintlig nod.
npm install -g @waves/surfboard
3. Visual Studio Code-tillÀgget
Detta steg Àr valfritt om du inte Àr en fan av IDE och föredrar textredigerare. Alla nödvÀndiga verktyg Àr kommandoradsverktyg. Om du anvÀnder vim, var uppmÀrksam pÄ tillÀgget .
Ladda ner och installera Visual Studio Code:
Ăppna VS Code och installera tillĂ€gget waves-ride:

WebblÀsartillÀgget Waves Keeper:
Klart!
Starta noden och Waves Explorer
1. Starta noden:
docker run -d -p 6869:6869 wavesplatform/waves-private-node
Se till att noden körs via REST API pÄ :

Swagger REST API-grÀnssnittet för noden
2. Starta en instans av Waves Explorer:
docker run -d -e API_NODE_URL=http://localhost:6869 -e NODE_LIST=http://localhost:6869 -p 3000:8080 wavesplatform/explorer
Ăppna din webblĂ€sare och gĂ„ till . Du kommer att se hur snabbt en tom kedja frĂ„n den lokala noden byggs.

Waves Explorer visar en instans av den lokala noden
Strukturen för RIDE och verktyget Surfboard
Skapa en tom katalog och kör kommandot
surfboard init
Kommandot initierar katalogen med projektstruktur, en "hello world"-applikation och tester. Om du öppnar den hÀr mappen med VS Code ser du:

Surfboard.config.json
- Under mappen .\/ride\/ hittar du en ensam fil wallet.ride â katalogen dĂ€r dApp-koden ligger. Vi kommer kort att analysera dApp:en i nĂ€sta avsnitt.
- I mappen . /test/ hittar du filen *.js. HĂ€r lagras tester.
- . /surfboard.config.json â konfigurationsfilen för att köra tester.
Envs â en viktig sektion. Varje miljö konfigureras sĂ„ hĂ€r:
- REST API-endpointen för noden som kommer att anvÀndas för att köra dApp och CHAIN_ID för nÀtverket.
- Hemlig fras för kontot med tokens som kommer att vara kÀllor till dina testtokens.
Som du ser stödjer surfboard.config.json flera miljöer som standard. StandardinstĂ€llningen Ă€r lokal miljö (nyckel defaultEnv â en Ă€ndringsbar parameter).
Applikationen Wallet-demo
Denna sektion Àr inte en handbok för RIDE-sprÄket. Snarare en översikt över applikationen som vi implementerar och testar för att bÀttre förstÄ vad som hÀnder i blockchain.
LÄt oss titta pÄ det enkla Wallet-demo-applikationen. Vem som helst kan skicka tokens till dApp-adressen. Man kan bara ta ut sina egna WAVES. TvÄ @Callable-funktioner Àr tillgÀngliga via InvokeScriptTransaction:
deposit(), som krÀver en bifogad betalning i WAVESwithdraw(amount: Int), som returnerar tokens
Under hela livscykeln för dApp kommer strukturen (address â amount) att upprĂ€tthĂ„llas:
Action
Resultant tillstÄnd
initial
tom
Alice sÀtter in 5 WAVES
alice-address â 500000000
Bob sÀtter in 2 WAVES
alice-address â 500000000
bob-address â 200000000
Bob tar ut 7 WAVES
NEKAS!
Alice tar ut 4 WAVES
alice-address â 100000000
bob-address â 200000000
HÀr Àr koden för att fullt förstÄ situationen:
# 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() = falseExempelkoden kan Àven hittas pÄ .
VSCode-pluginet stödjer kontinuerlig kompilering nÀr du redigerar filen. SÄ du kan alltid hÄlla koll pÄ fel i fliken PROBLEMS.

Om du vill anvÀnda en annan textredigerare vid kompilering av filen, anvÀnd
surfboard compile ride /wallet.ride
Detta kommer att ge dig en rad base64-kompilerad RIDE-kod.
Testscenariot för 'wallet.ride'
LÄt oss titta pÄ . Det fungerar pÄ JavaScript-ramverket Mocha. Det finns en "Before"-funktion och tre tester:
- "Before" finansierar flera konton via MassTransferTransaction, kompilerar skriptet och distribuerar det i blockchain.
- "Can deposit" skickar en InvokeScriptTransaction till nÀtverket och aktiverar deposit() för var och en av de tvÄ kontona.
- "Canât withdraw more than was deposited" testar att ingen kan stjĂ€la andras tokens.
- "Can deposit" kontrollerar att uttagen hanteras korrekt.
Kör tester med Surfboard och analysera resultaten i Waves Explorer
För att köra testet, kör
surfboard test
Om du har flera scenarier (till exempel behöver en separat distributionsskript) kan du köra
surfboard test my-scenario.js
Surfboard samlar testfiler i mappen ./test/ och kör skriptet i noden som Àr instÀlld i surfboard.config.json. Efter nÄgra sekunder kommer du att se nÄgot liknande:
wallet test suite
Genererar konton med nonce: ce8d86ee
Konto genererat: foofoofoofoofoofoofoofoofoofoofoo#ce8d86ee - 3M763WgwDhmry95XzafZedf7WoBf5ixMwhX
Konto genererat: barbarbarbarbarbarbarbarbarbar#ce8d86ee - 3MAi9KhwnaAk5HSHmYPjLRdpCAnsSFpoY2v
Konto genererat: wallet#ce8d86ee - 3M5r6XYMZPUsRhxbwYf1ypaTB6MNs2Yo1Gb
Konton har framgÄngsrikt finansierats
Skriptet har stÀllts in
â Kan sĂ€tta in (4385ms)
â Kan inte ta ut mer Ă€n vad som har satts in
â Kan ta ut (108ms)
3 godkÀnda (15s)
Hurra! Tester lyckades. Nu ska vi ta en titt pÄ vad som hÀnder nÀr man anvÀnder Waves Explorer: vi kan granska block eller klistra in nÄgon av adresserna ovan i sökfÀltet (till exempel, motsvarande wallet#. HÀr kan man hitta transaktionshistorik, dApps tillstÄnd, dekompilerad binÀrfil.

Waves Explorer. Applikationen som just har distribuerats.
NÄgra tips för Surfboard:
1. För att testa i testnet-miljö, anvÀnd:
surfboard test --env=testnet
2. Om du vill se JSON-versionerna av transaktionerna och hur de bearbetas av noden, kör testet med -v (betyder 'verbose'):
surfboard test -v
AnvÀnda applikationer med Waves Keeper
1. StÀll in Waves Keeper för att fungera:

InstÀllning av Waves Keeper för att fungera med lokal nod
2. Importera den hemliga frasen med tokens för nÀtverket? För enkelhetens skull, anvÀnd seed frÄn din nod: waves private node seed with waves tokens. Adress: 3M4qwDomRabJKLZxuXhwfqLApQkU592nWxF.
3. Du kan köra en one-page serverless applikation sjÀlv, anvÀnda npm. Eller gÄ till den befintliga:
4. Skriv in adressen frÄn testlanseringen (understruken ovan) i textfÀltet för dApp-adress
5. Skriv ett litet belopp i fÀltet "Deposit" och tryck pÄ knappen:

Waves Keeper begÀr tillstÄnd att signera InvokeScriptTransaction med en betalning av 10 WAVES.
6. BekrÀfta transaktionen:

Transaktionen har skapats och sÀnds till nÀtverket. Nu kan ID:t ses
7. Ăvervaka transaktionen med hjĂ€lp av Waves Explorer. Ange ID:t i sökfĂ€ltet

Slutsatser och ytterligare information
Vi har granskat verktygen för utveckling, testning, distribution och anvÀndning av enkla dApps pÄ Waves Platform:
- SprÄk RIDE
- VS Code-redigerare
- Waves Explorer
- Surfboard
- Waves Keeper
LÀnkar för den som vill fortsÀtta studera RIDE:
FortsÀtt att fördjupa dig i Àmnet RIDE och skapa din första dApp!
TL;DR:
KĂ€lla: habr.com
