Cara membina, menggunakan dan menguji dApp Waves RIDE

hello! Dalam artikel ini saya akan menunjukkan kepada anda cara menulis dan menjalankan dApp biasa pada nod Waves. Mari lihat alat, kaedah dan contoh pembangunan yang diperlukan.

Cara membina, menggunakan dan menguji dApp Waves RIDE

Skim pembangunan untuk dApps dan aplikasi biasa adalah hampir sama:

  • Menulis kod
  • Menulis ujian automatik
  • Melancarkan aplikasi
  • Menguji

Tools

1. docker untuk menjalankan nod dan Waves Explorer

Jika anda tidak mahu memulakan nod, anda boleh melangkau langkah ini. Lagipun, terdapat rangkaian ujian dan percubaan. Tetapi tanpa menggunakan nod anda sendiri, proses ujian mungkin berlarutan.

  • Anda akan sentiasa memerlukan akaun baharu dengan token ujian. Keran rangkaian ujian memindahkan 10 GELOMBANG setiap 10 minit.
  • Purata masa blok dalam rangkaian ujian ialah 1 minit, dalam nod - 15 saat. Ini amat ketara apabila transaksi memerlukan berbilang pengesahan.
  • Caching agresif boleh dilakukan pada nod ujian awam.
  • Ia juga mungkin tidak tersedia buat sementara waktu kerana penyelenggaraan.

Mulai sekarang saya akan menganggap bahawa anda sedang bekerja dengan nod anda sendiri.

2. Alat Baris Perintah Papan Luncur

  • Muat turun dan pasang Node.js menggunakan ppa, homebrew atau exe di sini: https://nodejs.org/en/download/.
  • Pasang Surfboard, alat yang membolehkan anda menjalankan ujian pada nod sedia ada.

npm install -g @waves/surfboard

3. Pemalam Kod Visual Studio

Langkah ini adalah pilihan jika anda bukan peminat IDE dan lebih suka editor teks. Semua alat yang diperlukan adalah utiliti baris arahan. Jika anda menggunakan vim, perhatikan pemalam vim-ride.

Muat turun dan pasang Kod Visual Studio: https://code.visualstudio.com/

Buka Kod VS dan pasang pemalam waves-ride:

Cara membina, menggunakan dan menguji dApp Waves RIDE

Sambungan penyemak imbas Waves Keeper: https://wavesplatform.com/products-keeper

Selesai!

Lancarkan nod dan Waves Explorer

1. Mulakan nod:

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

Pastikan nod dilancarkan melalui REST API in http://localhost:6869:

Cara membina, menggunakan dan menguji dApp Waves RIDE
Swagger REST API untuk nod

2. Mulakan contoh Waves Explorer:

docker run -d -e API_NODE_URL=http://localhost:6869 -e NODE_LIST=http://localhost:6869 -p 3000:8080 wavesplatform/explorer

Buka penyemak imbas dan pergi ke http://localhost:3000. Anda akan melihat seberapa cepat litar nod tempatan kosong dibina.

Cara membina, menggunakan dan menguji dApp Waves RIDE
Waves Explorer memaparkan contoh nod setempat

Struktur RIDE dan alat Papan Luncur

Buat direktori kosong dan jalankan arahan di dalamnya

surfboard init

Perintah ini memulakan direktori dengan struktur projek, aplikasi dan ujian "hello world". Jika anda membuka folder ini dengan Kod VS, anda akan melihat:

Cara membina, menggunakan dan menguji dApp Waves RIDE
Surfboard.config.json

  • Di bawah folder ./ride/ anda akan menemui satu fail wallet.ride - direktori tempat kod dApp berada. Kami akan menganalisis secara ringkas dApps dalam blok seterusnya.
  • Di bawah folder ./test/ anda akan menemui fail *.js. Ujian disimpan di sini.
  • ./surfboard.config.json – fail konfigurasi untuk menjalankan ujian.

Envs ialah bahagian penting. Setiap persekitaran dikonfigurasikan seperti ini:

  • Titik akhir API REST nod yang akan digunakan untuk melancarkan dApp dan CHAIN_ID rangkaian.
  • Frasa rahsia untuk akaun dengan token yang akan menjadi sumber token ujian anda.

Seperti yang anda lihat, surfboard.config.json menyokong berbilang persekitaran secara lalai. Lalai ialah persekitaran setempat (kunci defaultEnv ialah parameter yang boleh diubah).

Aplikasi dompet-demo

Bahagian ini bukan rujukan kepada bahasa RIDE. Sebaliknya, lihat aplikasi yang kami gunakan dan uji untuk lebih memahami perkara yang berlaku dalam rantaian blok.

Mari lihat aplikasi Wallet-demo yang ringkas. Sesiapa sahaja boleh menghantar token ke alamat dApp. Anda hanya boleh menarik balik WAVES anda. Dua fungsi @Callable tersedia melalui InvokeScriptTransaction:

  • deposit()yang memerlukan bayaran yang dilampirkan dalam WAVES
  • withdraw(amount: Int)yang mengembalikan token

Sepanjang kitaran hayat dApp, struktur (alamat → jumlah) akan dikekalkan:

Tindakan
Keadaan terhasil

awal
kosong

Alice mendepositkan 5 GELOMBANG
alice-alamat → 500000000

Bob deposit 2 GELOMBANG

alice-alamat → 500000000
alamat bob → 200000000

Bob menarik balik 7 GELOMBANG
DITOLAK!

Alice menarik balik 4 GELOMBANG
alice-alamat → 100000000
alamat bob → 200000000

Berikut ialah kod untuk memahami keadaan sepenuhnya:

# 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

Kod sampel juga boleh didapati di GitHub.

Pemalam VSCode menyokong kompilasi berterusan semasa mengedit fail. Oleh itu, anda sentiasa boleh memantau ralat dalam tab MASALAH.

Cara membina, menggunakan dan menguji dApp Waves RIDE
Jika anda ingin menggunakan editor teks yang berbeza semasa menyusun fail, gunakan

surfboard compile ride/wallet.ride

Ini akan mengeluarkan satu siri kod RIDE yang disusun base64.

Skrip ujian untuk 'wallet.ride'

Jom tengok fail ujian. Dikuasakan oleh rangka kerja Mocha JavaScript. Terdapat fungsi "Sebelum" dan tiga ujian:

  • “Sebelum” membiayai berbilang akaun melalui MassTransferTransaction, menyusun skrip dan menggunakan ia ke blockchain.
  • “Boleh mendepositkan” menghantar InvokeScriptTransaction ke rangkaian, mengaktifkan fungsi deposit() untuk setiap dua akaun.
  • Ujian “Tidak boleh mengeluarkan lebih daripada yang telah didepositkan” yang tiada siapa boleh mencuri token orang lain.
  • “Boleh mendepositkan” menyemak bahawa pengeluaran diproses dengan betul.

Jalankan ujian dari Papan Selancar dan analisis keputusan dalam Waves Explorer

Untuk menjalankan ujian, jalankan

surfboard test

Jika anda mempunyai berbilang skrip (contohnya, anda memerlukan skrip penggunaan berasingan), anda boleh menjalankan

surfboard test my-scenario.js

Papan luncur akan mengumpul fail ujian dalam folder ./test/ dan menjalankan skrip pada nod yang dikonfigurasikan dalam surfboard.config.json. Selepas beberapa saat anda akan melihat sesuatu seperti ini:

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! Ujian telah berlalu. Sekarang mari kita lihat apa yang berlaku apabila menggunakan Waves Explorer: lihat pada blok atau tampal salah satu alamat di atas ke dalam carian (contohnya, yang sepadan wallet#. Di sana anda boleh menemui sejarah urus niaga, status dApp, fail binari yang dinyahkompilasi.

Cara membina, menggunakan dan menguji dApp Waves RIDE
Penjelajah Gelombang. Aplikasi yang baru sahaja digunakan.

Beberapa Petua Papan Luncur:

1. Untuk menguji dalam persekitaran testnet, gunakan:

surfboard test --env=testnet

Dapatkan token ujian

2. Jika anda ingin melihat versi transaksi JSON dan cara transaksi tersebut diproses oleh nod, jalankan ujian dengan -v (bermaksud 'verbose'):

surfboard test -v

Menggunakan apl dengan Waves Keeper

1. Sediakan Waves Keeper untuk berfungsi: http://localhost:6869

Cara membina, menggunakan dan menguji dApp Waves RIDE
Menyediakan Waves Keeper untuk berfungsi dengan nod setempat

2. Import frasa rahsia dengan token untuk rangkaian? Untuk kesederhanaan, gunakan benih awal nod anda: waves private node seed with waves tokens. Alamat: 3M4qwDomRabJKLZxuXhwfqLApQkU592nWxF.

3. Anda boleh menjalankan sendiri aplikasi halaman tunggal tanpa pelayan menggunakan npm. Atau pergi ke yang sedia ada: chrome-ext.wvservices.com/dapp-wallet.html

4. Masukkan alamat dompet daripada ujian dijalankan (digariskan di atas) ke dalam kotak teks alamat dApp

5. Masukkan jumlah kecil dalam medan "Deposit" dan klik butang:

Cara membina, menggunakan dan menguji dApp Waves RIDE
Waves Keeper meminta kebenaran untuk menandatangani InvokeScriptTransaction dengan bayaran 10 WAVES.

6. Sahkan transaksi:

Cara membina, menggunakan dan menguji dApp Waves RIDE
Transaksi dibuat dan disiarkan ke rangkaian. Sekarang anda boleh melihat ID dia

7. Pantau transaksi menggunakan Waves Explorer. Masukkan ID dalam medan carian

Cara membina, menggunakan dan menguji dApp Waves RIDE

Kesimpulan dan maklumat tambahan

Kami melihat alat untuk membangun, menguji, menggunakan dan menggunakan dApps mudah pada Platform Waves:

  • bahasa RIDE
  • Editor Kod VS
  • Penjelajah Waves
  • Papan luncur
  • Penjaga Ombak

Pautan untuk mereka yang ingin terus belajar RIDE:

Lebih banyak contoh
IDE dalam talian dengan contoh
Dokumentasi Gelombang
Sembang pembangun dalam Telegram
Gelombang dan RIDE pada stackoverflow
BARU! Kursus dalam talian tentang mencipta dApps pada Platform Waves

Teruskan menyelami topik RIDE dan buat dApp pertama anda!

TL; DR: bit.ly/2YCFnwY

Sumber: www.habr.com

Tambah komen