Hello! Ing artikel iki aku bakal nuduhake sampeyan carane nulis lan mbukak dApp biasa ing simpul Waves. Ayo goleki alat sing dibutuhake, metode lan conto pangembangan.
Skema pangembangan kanggo dApps lan aplikasi biasa meh padha:
Nulis kode
Nulis testing otomatis
Bukak aplikasi
Testing
Piranti
1. docker kanggo mbukak simpul lan Waves Explorer
Yen sampeyan ora pengin miwiti simpul, sampeyan bisa ngliwati langkah iki. Sawise kabeh, ana jaringan tes lan eksperimen. Nanging tanpa nggunakake simpul sampeyan dhewe, proses tes bisa uga terus.
Sampeyan bakal mbutuhake akun anyar kanthi token uji coba. Faucet jaringan test ngirim 10 GELOMBANG saben 10 menit.
docker run -d -e API_NODE_URL=http://localhost:6869 -e NODE_LIST=http://localhost:6869 -p 3000:8080 wavesplatform/explorer
Bukak browser banjur pindhah menyang http://localhost:3000. Sampeyan bakal weruh carane cepet sirkuit simpul lokal kosong dibangun.
Waves Explorer nampilake conto simpul lokal
Struktur RIDE lan alat Surfboard
Nggawe direktori kosong lan mbukak printah ing
surfboard init
Printah kasebut miwiti direktori kanthi struktur proyek, aplikasi lan tes "hello world". Yen sampeyan mbukak folder iki nganggo VS Code, sampeyan bakal weruh:
Surfboard.config.json
Ing folder ./ride/ sampeyan bakal nemokake siji file wallet.ride - direktori ngendi kode dApp dumunung. Kita bakal nganalisis dApps ing blok sabanjure.
Ing folder ./test/ sampeyan bakal nemokake file *.js. Tes disimpen ing kene.
./surfboard.config.json β file konfigurasi kanggo tes mlaku.
Envs minangka bagean penting. Saben lingkungan dikonfigurasi kaya iki:
Titik pungkasan API REST saka simpul sing bakal digunakake kanggo miwiti dApp lan CHAIN_ID jaringan.
Frasa rahasia kanggo akun kanthi token sing bakal dadi sumber token tes sampeyan.
Nalika sampeyan bisa ndeleng, surfboard.config.json ndhukung macem-macem lingkungan minangka standar. Default yaiku lingkungan lokal (kunci defaultEnv minangka parameter sing bisa diganti).
Aplikasi dompet-demo
Bagian iki dudu referensi kanggo basa RIDE. Luwih, deleng aplikasi sing kita pasang lan nyoba kanggo luwih ngerti apa sing kedadeyan ing pamblokiran.
Ayo goleki aplikasi Dompet-demo sing prasaja. Sapa wae bisa ngirim token menyang alamat dApp. Sampeyan mung bisa mbatalake WAVES sampeyan. Loro fungsi @Callable kasedhiya liwat InvokeScriptTransaction:
deposit()sing mbutuhake pembayaran ditempelake ing WAVES
withdraw(amount: Int)sing ngasilake token
Sajrone siklus urip dApp, struktur (alamat β jumlah) bakal dijaga:
Alice mundur 4 GELOMBANG
alice-alamat β 100000000
bob-alamat β 200000000
Iki kode kanggo ngerti kahanan kasebut:
# 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 ndhukung kompilasi terus-terusan nalika nyunting file. Mulane, sampeyan bisa tansah ngawasi kasalahan ing tab MASALAH.
Yen sampeyan pengin nggunakake editor teks sing beda nalika nyusun file, gunakake
surfboard compile ride/wallet.ride
Iki bakal ngasilake seri kode RIDE kompilasi base64.
Skrip tes kanggo 'wallet.ride'
Ayo kang katon ing file tes. Didhukung dening kerangka Mocha JavaScript. Ana fungsi "Sadurunge" lan telung tes:
"Sadurunge" mbiayai pirang-pirang akun liwat MassTransferTransaction, nyusun skrip lan nyebarake menyang blokchain.
"Bisa simpenan" ngirim InvokeScriptTransaction kanggo jaringan, ngaktifake simpenan () fungsi kanggo saben loro akun.
"Ora bisa mbatalake luwih saka setor" tes sing ora ana sing bisa nyolong token wong liya.
"Bisa setor" mriksa yen penarikan diproses kanthi bener.
Jalanake tes saka Surfboard lan analisa asil ing Waves Explorer
Kanggo mbukak test, mbukak
surfboard test
Yen sampeyan duwe sawetara skrip (contone, sampeyan butuh skrip penyebaran sing kapisah), sampeyan bisa mbukak
surfboard test my-scenario.js
Surfboard bakal ngumpulake file test ing folder ./test/ lan mbukak script ing simpul sing diatur ing surfboard.config.json. Sawise sawetara detik sampeyan bakal weruh kaya iki:
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)
Hore! Tes lulus. Saiki ayo goleki apa sing kedadeyan nalika nggunakake Waves Explorer: deleng blok utawa tempel salah sawijining alamat ing ndhuwur menyang telusuran (contone, sing cocog wallet#. Ing kana sampeyan bisa nemokake riwayat transaksi, status dApp, file binar sing dikompilasi.
Waves Explorer. Aplikasi sing lagi wae disebarake.
2. Impor tembung rahasia karo token kanggo jaringan? Kanggo kesederhanaan, gunakake wiji awal simpul sampeyan: waves private node seed with waves tokens. alamat: 3M4qwDomRabJKLZxuXhwfqLApQkU592nWxF.