Kumaha Ngawangun, Nyebarkeun sareng Uji Gelombang RIDE dApp
Halo! Dina tulisan ieu kuring bakal nunjukkeun anjeun kumaha cara nyerat sareng ngajalankeun dApp biasa dina titik Waves. Hayu urang nempo parabot diperlukeun, métode jeung conto pangwangunan.
Skéma pamekaran pikeun dApps sareng aplikasi biasa ampir sami:
Kodeu tulisan
Nulis tés otomatis
Ngajalankeun aplikasi
Nguji
instrumen
1. docker pikeun ngajalankeun titik sareng Waves Explorer
Upami anjeun henteu hoyong ngamimitian node, anjeun tiasa ngalangkungan léngkah ieu. Barina ogé, aya tés sareng jaringan ékspérimén. Tapi tanpa nyebarkeun titik anjeun nyalira, prosés tés tiasa nyered.
Anjeun bakal terus butuh akun anyar kalawan tokens test. Keran jaringan uji mindahkeun 10 GELOMBANG unggal 10 menit.
Waktu blok rata-rata dina jaringan tés nyaéta 1 menit, dina titik - 15 detik. Ieu utamana noticeable lamun urus merlukeun sababaraha confirmations.
Caching agrésif mungkin dina titik tés umum.
Éta ogé tiasa samentawis teu sayogi kusabab pangropéa.
Ti ayeuna kuring bakal nganggap yén anjeun damel sareng node anjeun nyalira.
Pasang Surfboard, alat anu ngamungkinkeun anjeun ngajalankeun tés dina titik anu tos aya.
npm install -g @waves/surfboard
3. Visual Studio Code plugin
Léngkah ieu opsional upami anjeun sanés kipas IDE sareng resep pangropéa téksu. Sadaya alat anu diperyogikeun nyaéta utilitas garis paréntah. Upami anjeun nganggo vim, perhatikeun plugin vim-numpak.
Unduh sareng pasang Visual Studio Code: https://code.visualstudio.com/
docker run -d -e API_NODE_URL=http://localhost:6869 -e NODE_LIST=http://localhost:6869 -p 3000:8080 wavesplatform/explorer
Buka browser sareng angkat ka http://localhost:3000. Anjeun bakal ningali kumaha gancang sirkuit titik lokal kosong diwangun.
Waves Explorer mintonkeun conto titik lokal
Struktur RIDE sareng alat Surfboard
Jieun hiji diréktori kosong tur ngajalankeun paréntah di dinya
surfboard init
Paréntah initializes diréktori kalawan struktur proyék, "halo dunya" aplikasi jeung tés. Upami anjeun muka folder ieu nganggo VS Code, anjeun bakal ningali:
Surfboard.config.json
Dina folder ./ride/ anjeun bakal manggihan hiji file wallet.ride tunggal - diréktori dimana kode dApp lokasina. Urang sakeudeung bakal nganalisis dApps dina blok salajengna.
Dina folder ./test/ anjeun bakal manggihan hiji * .js file. Tés disimpen di dieu.
./surfboard.config.json – file konfigurasi pikeun ngajalankeun tés.
Envs mangrupa bagian penting. Unggal lingkungan dikonpigurasikeun sapertos kieu:
Titik tungtung API REST tina titik anu bakal dianggo pikeun ngaluncurkeun dApp sareng CHAIN_ID jaringan.
Frase rusiah pikeun akun sareng token anu bakal janten sumber token tés anjeun.
Sakumaha anjeun tiasa tingali, surfboard.config.json ngadukung sababaraha lingkungan sacara standar. Standarna nyaéta lingkungan lokal (konci defaultEnv mangrupikeun parameter anu tiasa dirobih).
Aplikasi dompét-demo
Bagian ieu sanés rujukan kana basa RIDE. Sabalikna, tingali aplikasi anu urang pasangkeun sareng uji pikeun langkung ngartos naon anu lumangsung dina blockchain.
Hayu urang tingali hiji aplikasi Wallet-demo basajan. Saha waé tiasa ngirim token ka alamat dApp. Anjeun ngan ukur tiasa mundur WAVES anjeun. Dua fungsi @Callable sayogi via InvokeScriptTransaction:
deposit()nu merlukeun pamayaran napel dina WAVES
withdraw(amount: Int)nu mulih tokens
Sapanjang siklus hirup dApp, struktur (alamat → jumlah) bakal dijaga:
aksi
kaayaan hasilna
awal
kosong
Alice deposit 5 GELOMBANG
Alice-alamat → 500000000
deposit Bob 2 GELOMBANG
Alice-alamat → 500000000
bob-alamat → 200000000
Bob mundur 7 GELOMBANG
DIBALAK!
Alice mundur 4 GELOMBANG
Alice-alamat → 100000000
bob-alamat → 200000000
Ieu kodeu pikeun pinuh ngartos kaayaan:
# 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
Plugin VSCode ngadukung kompilasi kontinyu nalika ngédit file. Ku alatan éta, anjeun salawasna bisa ngawas kasalahan dina tab MASALAH.
Upami anjeun hoyong nganggo pangropéa téksu anu béda nalika nyusun file, paké
surfboard compile ride/wallet.ride
Ieu bakal kaluaran runtuyan base64 disusun kode numpak.
Tés skrip pikeun 'wallet.ride'
Hayu urang tingali file tés. Dipasang ku kerangka Mocha JavaScript. Aya fungsi "Sateuacan" sareng tilu tés:
"Sateuacan" dana sababaraha rekening via MassTransferTransaction, compiles naskah jeung deploys ka blockchain nu.
"Tiasa deposit" ngirimkeun hiji InvokeScriptTransaction ka jaringan, ngaktipkeun deposit () fungsi pikeun tiap tina dua rekening.
"Teu tiasa mundur langkung ti anu disimpen" tés anu teu aya anu tiasa maok token batur.
"Tiasa deposit" cék yén withdrawals diolah leres.
Jalankeun tés tina Surfboard sareng analisa hasil dina Waves Explorer
Pikeun ngajalankeun tés, ngajalankeun
surfboard test
Upami Anjeun gaduh sababaraha Aksara (Contona, anjeun perlu Aksara deployment misah), anjeun tiasa ngajalankeun
surfboard test my-scenario.js
Surfboard bakal ngumpulkeun file test dina folder ./test/ tur ngajalankeun skrip dina titik nu geus ngonpigurasi dina surfboard.config.json. Saatos sababaraha detik anjeun bakal ningali sapertos kieu:
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)
Horeeee! Tés lulus. Ayeuna hayu urang tingali naon anu lumangsung nalika nganggo Waves Explorer: tingali blok atanapi témpél salah sahiji alamat di luhur kana milarian (contona, wallet#. Di dinya anjeun tiasa mendakan riwayat transaksi, status dApp, file binér anu dikompilasi.
Waves Explorer. Hiji aplikasi nu geus ngan geus deployed.
Nyetél Waves Keeper pikeun damel sareng titik lokal
2. Impor frase rusiah kalawan tokens pikeun jaringan? Pikeun kesederhanaan, paké siki awal titik anjeun: waves private node seed with waves tokens. Alamat: 3M4qwDomRabJKLZxuXhwfqLApQkU592nWxF.