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.

Kumaha Ngawangun, Nyebarkeun sareng Uji Gelombang RIDE dApp

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.

2. Surfboard Komando Line Alat

  • Unduh sareng pasang Node.js nganggo ppa, homebrew atanapi exe di dieu: https://nodejs.org/en/download/.
  • 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/

Buka VS Code sareng pasang plugin gelombang-naik:

Kumaha Ngawangun, Nyebarkeun sareng Uji Gelombang RIDE dApp

Ekstensi browser Waves Keeper: https://wavesplatform.com/products-keeper

Réngsé!

Mimitian titik sareng Waves Explorer

1. Mimitian titik:

docker run -d -p 6869:6869 wavesplatform/waves-private-node

Pastikeun yén titik dibuka via REST API di http://localhost:6869:

Kumaha Ngawangun, Nyebarkeun sareng Uji Gelombang RIDE dApp
Swagger REST API pikeun titik

2. Mimitian instance Waves Explorer:

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.

Kumaha Ngawangun, Nyebarkeun sareng Uji Gelombang RIDE dApp
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:

Kumaha Ngawangun, Nyebarkeun sareng Uji Gelombang RIDE dApp
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

Kode sampel ogé bisa kapanggih dina GitHub.

Plugin VSCode ngadukung kompilasi kontinyu nalika ngédit file. Ku alatan éta, anjeun salawasna bisa ngawas kasalahan dina tab MASALAH.

Kumaha Ngawangun, Nyebarkeun sareng Uji Gelombang RIDE dApp
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.

Kumaha Ngawangun, Nyebarkeun sareng Uji Gelombang RIDE dApp
Waves Explorer. Hiji aplikasi nu geus ngan geus deployed.

Sababaraha Tip Papan Selancar:

1. Pikeun nguji dina lingkungan testnet, paké:

surfboard test --env=testnet

Kéngingkeun token tés

2. Upami anjeun hoyong ningali versi JSON tina transaksi sareng kumaha aranjeunna diolah ku titik, jalankeun tés nganggo -v (hartosna 'verbose'):

surfboard test -v

Ngagunakeun aplikasi sareng Waves Keeper

1. Nyetél Waves Keeper pikeun digawé: http://localhost:6869

Kumaha Ngawangun, Nyebarkeun sareng Uji Gelombang RIDE dApp
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.

3. Anjeun tiasa ngajalankeun aplikasi halaman tunggal tanpa server nganggo npm. Atawa buka nu geus aya: chrome-ext.wvservices.com/dapp-wallet.html

4. Lebetkeun alamat dompét tina uji coba (digariskeun di luhur) kana kotak teks alamat dApp

5. Lebetkeun jumlah leutik dina widang "Deposit" teras klik tombol:

Kumaha Ngawangun, Nyebarkeun sareng Uji Gelombang RIDE dApp
Waves Keeper nyuhunkeun idin pikeun ngadaptarkeun InvokeScriptTransaction kalayan mayar 10 WAVES.

6. Konfirmasi transaksi:

Kumaha Ngawangun, Nyebarkeun sareng Uji Gelombang RIDE dApp
Transaksi didamel sareng disiarkeun ka jaringan. Ayeuna anjeun tiasa ningali ID na

7. Ngawas transaksi ngagunakeun Waves Explorer. Lebetkeun ID dina widang teangan

Kumaha Ngawangun, Nyebarkeun sareng Uji Gelombang RIDE dApp

Kacindekan sareng inpormasi tambahan

Kami ningali alat pikeun ngembangkeun, nguji, nyebarkeun sareng ngagunakeun dApps saderhana dina Waves Platform:

  • basa RIDE
  • VS Code Editor
  • Waves Explorer
  • Papan selancar
  • Panjaga Ombak

Tautan pikeun anu hoyong neraskeun diajar RIDE:

Langkung conto
IDE online kalawan conto
Dokuméntasi gelombang
Pangembang obrolan dina Telegram
Gelombang jeung numpak on stackoverflow
ANYAR! Kursus online ngeunaan nyiptakeun dApps dina Waves Platform

Teruskeun kana topik RIDE sareng jieun dApp munggaran anjeun!

TL; DR: bit.ly/2YCFnwY

sumber: www.habr.com

Tambahkeun komentar