ProHoster > Blog > İdarə > Waves RIDE dApp-ı necə qurmaq, yerləşdirmək və sınaqdan keçirmək olar
Waves RIDE dApp-ı necə qurmaq, yerləşdirmək və sınaqdan keçirmək olar
Salam! Bu yazıda sizə Dalğalar qovşağında adi dApp-ı necə yazmağı və işlətməyi göstərəcəyəm. Lazımi vasitələrə, üsullara və inkişaf nümunəsinə baxaq.
dApps və adi proqramlar üçün inkişaf sxemi demək olar ki, eynidir:
Kodun yazılması
Avtomatlaşdırılmış testlərin yazılması
Tətbiqin işə salınması
Test
Tools
1. docker node və Waves Explorer-i işə salmaq üçün
Bir node başlamaq istəmirsinizsə, bu addımı atlaya bilərsiniz. Axı, sınaq və eksperimental şəbəkə var. Ancaq öz nodeunuzu yerləşdirmədən sınaq prosesi uzana bilər.
Daim test nişanları olan yeni hesablara ehtiyacınız olacaq. Test şəbəkə kranı hər 10 dəqiqədən bir 10 DALĞA ötürür.
Test şəbəkəsində orta bloklama müddəti 1 dəqiqə, qovşaqda isə 15 saniyədir. Bu, əməliyyat bir neçə təsdiq tələb etdikdə xüsusilə nəzərə çarpır.
İctimai test qovşaqlarında aqressiv keşləmə mümkündür.
Onlar həmçinin texniki xidmətə görə müvəqqəti olaraq əlçatmaz ola bilərlər.
Bundan sonra öz node ilə işlədiyinizi güman edəcəm.
Mövcud node üzərində testlər keçirməyə imkan verən bir vasitə olan Surfboard quraşdırın.
npm install -g @waves/surfboard
3. Visual Studio Code plagini
Əgər siz IDE həvəskarı deyilsinizsə və mətn redaktorlarına üstünlük verirsinizsə, bu addım isteğe bağlıdır. Bütün lazımi alətlər əmr satırı yardım proqramlarıdır. Əgər vim istifadə edirsinizsə, plaqinə diqqət yetirin vim-ride.
Visual Studio Kodunu endirin və quraşdırın: https://code.visualstudio.com/
VS Kodunu açın və waves-ride plaginini quraşdırın:
docker run -d -e API_NODE_URL=http://localhost:6869 -e NODE_LIST=http://localhost:6869 -p 3000:8080 wavesplatform/explorer
Bir brauzer açın və gedin http://localhost:3000. Boş lokal node dövrəsinin nə qədər tez qurulduğunu görəcəksiniz.
Waves Explorer yerli qovşaq nümunəsini göstərir
RIDE strukturu və Surfboard aləti
Boş bir qovluq yaradın və içindəki əmri işə salın
surfboard init
Komanda layihə strukturu, “salam dünya” proqramları və testləri olan kataloqu işə salır. Bu qovluğu VS Kodu ilə açsanız, görəcəksiniz:
Surfboard.config.json
./ride/ qovluğunun altında siz wallet.ride tək faylını tapacaqsınız - dApp kodunun yerləşdiyi qovluq. Növbəti blokda dApp-ları qısaca təhlil edəcəyik.
./test/ qovluğunda siz *.js faylı tapacaqsınız. Testlər burada saxlanılır.
./surfboard.config.json – testləri həyata keçirmək üçün konfiqurasiya faylı.
Envs mühüm bölmədir. Hər bir mühit belə konfiqurasiya edilmişdir:
Şəbəkənin dApp və CHAIN_ID-ni işə salmaq üçün istifadə olunacaq qovşağın REST API son nöqtəsi.
Test tokenlərinizin mənbəyi olacaq tokenləri olan hesab üçün gizli ifadə.
Gördüyünüz kimi surfboard.config.json defolt olaraq çoxlu mühitləri dəstəkləyir. Defolt yerli mühitdir (defaultEnv açarı dəyişən parametrdir).
Pul kisəsi demo tətbiqi
Bu bölmə RIDE dilinə istinad deyil. Əksinə, blokçeynində nə baş verdiyini daha yaxşı başa düşmək üçün yerləşdirdiyimiz və sınaqdan keçirdiyimiz tətbiqə nəzər salın.
Gəlin sadə Wallet-demo proqramına baxaq. Hər kəs tokenləri dApp ünvanına göndərə bilər. Siz yalnız DALĞALARInızı geri ala bilərsiniz. InvokeScriptTransaction vasitəsilə iki @Callable funksiyası mövcuddur:
deposit()WAVES-də əlavə ödəniş tələb olunur
withdraw(amount: Int)tokenləri qaytaran
dApp-ın həyat dövrü ərzində struktur (ünvan → məbləğ) saxlanılacaq:
# 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
VSCode plagini faylı redaktə edərkən davamlı kompilyasiyanı dəstəkləyir. Buna görə də, siz həmişə PROBLEMLƏR sekmesinde səhvləri izləyə bilərsiniz.
Faylı tərtib edərkən fərqli mətn redaktorundan istifadə etmək istəyirsinizsə, istifadə edin
surfboard compile ride/wallet.ride
Bu, bir sıra base64 tərtib edilmiş RIDE kodunu çıxaracaq.
'wallet.ride' üçün sınaq skripti
Gəlin baxaq test faylı. JavaScript-in Mocha çərçivəsi ilə təchiz edilmişdir. "Əvvəl" funksiyası və üç test var:
“Əvvəl” MassTransferTransaction vasitəsilə birdən çox hesabı maliyyələşdirir, skripti tərtib edir və blokçeynə yerləşdirir.
“Depozit edə bilər” şəbəkəyə InvokeScriptTransaction göndərir, iki hesabın hər biri üçün depozit() funksiyasını aktivləşdirir.
Heç kimin başqalarının tokenlərini oğurlaya bilməyəcəyi “Depozit edilmiş məbləğdən çoxunu geri götürə bilməz” testləri.
“Depozit edə bilər” pulun çıxarılmasının düzgün aparıldığını yoxlayır.
Surfboard-dan testlər aparın və nəticələri Waves Explorer-də təhlil edin
Testi həyata keçirmək üçün qaçın
surfboard test
Birdən çox skriptiniz varsa (məsələn, ayrıca yerləşdirmə skriptinə ehtiyacınız var), siz işlədə bilərsiniz
surfboard test my-scenario.js
Surfboard test fayllarını ./test/ qovluğunda toplayacaq və skripti surfboard.config.json-da konfiqurasiya edilmiş node üzərində işlədəcək. Bir neçə saniyədən sonra belə bir şey görəcəksiniz:
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)
Yaşasın! Testlər keçdi. İndi gəlin Waves Explorer istifadə edərkən nə baş verdiyinə nəzər salaq: bloklara baxın və ya yuxarıdakı ünvanlardan birini axtarışa yapışdırın (məsələn, müvafiq wallet#. Orada əməliyyat tarixini, dApp statusunu, dekompilyasiya edilmiş ikili faylı tapa bilərsiniz.
Dalğalar Explorer. Yenicə istifadəyə verilmiş proqram.
Bəzi Surfboard Məsləhətləri:
1. Testnet mühitində test etmək üçün istifadə edin:
Yerli qovşaqla işləmək üçün Waves Keeper-in qurulması
2. Şəbəkə üçün tokenlərlə məxfi ifadə idxal edilsin? Sadəlik üçün nodeunuzun ilkin toxumundan istifadə edin: waves private node seed with waves tokens. Ünvan: 3M4qwDomRabJKLZxuXhwfqLApQkU592nWxF.