Cara Membangun, Menerapkan, dan Menguji Waves RIDE dApp

Halo! Pada artikel ini saya akan menunjukkan cara menulis dan menjalankan dApp reguler pada node Waves. Mari kita lihat alat, metode, dan contoh pengembangan yang diperlukan.

Cara Membangun, Menerapkan, dan Menguji Waves RIDE dApp

Skema pengembangan dApps dan aplikasi reguler hampir sama:

  • Kami menulis kodenya
  • Menulis pengujian otomatis
  • Meluncurkan aplikasi
  • Pengujian

Alat

1. docker untuk menjalankan node dan Waves Explorer

Jika Anda tidak ingin memulai sebuah node, Anda dapat melewati langkah ini. Bagaimanapun, ada jaringan uji dan eksperimental. Namun tanpa menerapkan node Anda sendiri, proses pengujian mungkin akan berlarut-larut.

  • Anda akan selalu membutuhkan akun baru dengan token uji. Faucet jaringan uji mentransfer 10 GELOMBANG setiap 10 menit.
  • Waktu blok rata-rata di jaringan uji adalah 1 menit, di node – 15 detik. Hal ini terutama terlihat ketika suatu transaksi memerlukan banyak konfirmasi.
  • Caching yang agresif dimungkinkan pada node pengujian publik.
  • Mereka mungkin juga tidak tersedia untuk sementara karena pemeliharaan.

Mulai sekarang saya akan berasumsi bahwa Anda bekerja dengan node Anda sendiri.

2. Alat Baris Perintah Papan Selancar

  • Unduh dan instal Node.js menggunakan ppa, homebrew atau exe di sini: https://nodejs.org/en/download/.
  • Instal Surfboard, alat yang memungkinkan Anda menjalankan pengujian pada node yang ada.

npm install -g @waves/surfboard

3. Plugin Kode Visual Studio

Langkah ini opsional jika Anda bukan penggemar IDE dan lebih menyukai editor teks. Semua alat yang diperlukan adalah utilitas baris perintah. Jika Anda menggunakan vim, perhatikan pluginnya vim-naik.

Unduh dan instal Kode Visual Studio: https://code.visualstudio.com/

Buka VS Code dan instal plugin wave-ride:

Cara Membangun, Menerapkan, dan Menguji Waves RIDE dApp

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

Selesai!

Mulai node dan Waves Explorer

1. Mulai simpul:

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

Pastikan node diluncurkan melalui REST API di http://localhost:6869:

Cara Membangun, Menerapkan, dan Menguji Waves RIDE dApp
Swagger REST API untuk node.js

2. Mulai sebuah instance dari 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 dan pergi ke http://localhost:3000. Anda akan melihat seberapa cepat sirkuit node lokal yang kosong dibangun.

Cara Membangun, Menerapkan, dan Menguji Waves RIDE dApp
Waves Explorer menampilkan contoh node lokal

Struktur RIDE dan alat Papan Selancar

Buat direktori kosong dan jalankan perintah di dalamnya

surfboard init

Perintah ini menginisialisasi direktori dengan struktur proyek, aplikasi dan pengujian “hello world”. Jika Anda membuka folder ini dengan VS Code, Anda akan melihat:

Cara Membangun, Menerapkan, dan Menguji Waves RIDE dApp
Papan Selancar.config.json

  • Di bawah folder ./ride/ Anda akan menemukan satu file wallet.ride - direktori tempat kode dApp berada. Kami akan menganalisis dApps secara singkat di blok berikutnya.
  • Di bawah folder ./test/ Anda akan menemukan file *.js. Tes disimpan di sini.
  • ./surfboard.config.json – file konfigurasi untuk menjalankan pengujian.

Envs adalah bagian penting. Setiap lingkungan dikonfigurasi seperti ini:

  • Titik akhir REST API dari node yang akan digunakan untuk meluncurkan dApp dan CHAIN_ID jaringan.
  • Frasa rahasia untuk akun dengan token yang akan menjadi sumber token pengujian Anda.

Seperti yang Anda lihat, surfboard.config.json mendukung banyak lingkungan secara default. Defaultnya adalah lingkungan lokal (kunci defaultEnv adalah parameter yang dapat diubah).

Aplikasi demo dompet

Bagian ini bukan referensi ke bahasa RIDE. Sebaliknya, lihat aplikasi yang kami terapkan dan uji untuk lebih memahami apa yang terjadi di blockchain.

Mari kita lihat aplikasi demo Wallet sederhana. Siapa pun dapat mengirim token ke alamat dApp. Anda hanya dapat menarik WAVES Anda. Dua fungsi @Callable tersedia melalui InvokeScriptTransaction:

  • deposit()yang memerlukan pembayaran terlampir dalam WAVES
  • withdraw(amount: Int)yang mengembalikan token

Sepanjang siklus hidup dApp, struktur (alamat → jumlah) akan dipertahankan:

Tindakan
Keadaan yang dihasilkan

mulanya
kosong

Alice menyetor 5 GELOMBANG
alamat alice → 500000000

Bob menyetor 2 GELOMBANG

alamat alice → 500000000
alamat bob → 200000000

Bob menarik 7 GELOMBANG
DITOLAK!

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

Berikut ini kode untuk memahami situasinya 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

Contoh kode juga dapat ditemukan di GitHub.

Plugin VSCode mendukung kompilasi berkelanjutan saat mengedit file. Oleh karena itu, Anda selalu dapat memantau kesalahan di tab MASALAH.

Cara Membangun, Menerapkan, dan Menguji Waves RIDE dApp
Jika Anda ingin menggunakan editor teks lain saat mengkompilasi file, gunakan

surfboard compile ride/wallet.ride

Ini akan menampilkan serangkaian kode RIDE yang dikompilasi base64.

Skrip pengujian untuk 'wallet.ride'

Mari lihat berkas tes. Didukung oleh kerangka Mocha JavaScript. Ada fungsi "Sebelum" dan tiga tes:

  • “Sebelum” mendanai banyak akun melalui MassTransferTransaction, mengkompilasi skrip dan menyebarkannya ke blockchain.
  • “Dapat menyetor” mengirimkan InvokeScriptTransaction ke jaringan, mengaktifkan fungsi deposit() untuk masing-masing dua akun.
  • Tes “Tidak dapat menarik lebih dari yang disetorkan” bahwa tidak ada yang dapat mencuri token orang lain.
  • “Dapat menyetor” memeriksa apakah penarikan diproses dengan benar.

Jalankan tes dari Surfboard dan analisis hasilnya di Waves Explorer

Untuk menjalankan pengujian, jalankan

surfboard test

Jika Anda memiliki beberapa skrip (misalnya, Anda memerlukan skrip penerapan terpisah), Anda dapat menjalankannya

surfboard test my-scenario.js

Surfboard akan mengumpulkan file pengujian di folder ./test/ dan menjalankan skrip pada node yang dikonfigurasi di surfboard.config.json. Setelah beberapa detik 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 berlalu. Sekarang mari kita lihat apa yang terjadi saat menggunakan Waves Explorer: lihat blok atau tempel salah satu alamat di atas ke dalam pencarian (misalnya, alamat yang sesuai wallet#. Di sana Anda dapat menemukan riwayat transaksi, status dApp, file biner yang didekompilasi.

Cara Membangun, Menerapkan, dan Menguji Waves RIDE dApp
Penjelajah Gelombang. Aplikasi yang baru saja dikerahkan.

Beberapa Tip Papan Selancar:

1. Untuk menguji di lingkungan testnet, gunakan:

surfboard test --env=testnet

Dapatkan token uji

2. Jika Anda ingin melihat transaksi versi JSON dan cara pemrosesannya oleh node, jalankan pengujian dengan -v (berarti 'verbose'):

surfboard test -v

Menggunakan aplikasi dengan Waves Keeper

1. Siapkan Waves Keeper agar berfungsi: http://localhost:6869

Cara Membangun, Menerapkan, dan Menguji Waves RIDE dApp
Menyiapkan Waves Keeper untuk bekerja dengan node lokal

2. Impor frase rahasia dengan token untuk jaringan? Untuk mempermudah, gunakan seed awal dari node Anda: waves private node seed with waves tokens. Alamat: 3M4qwDomRabJKLZxuXhwfqLApQkU592nWxF.

3. Anda dapat menjalankan sendiri aplikasi satu halaman tanpa server menggunakan npm. Atau buka yang sudah ada: chrome-ext.wvservices.com/dapp-wallet.html

4. Masukkan alamat dompet dari uji coba (yang digarisbawahi di atas) ke dalam kotak teks alamat dApp

5. Masukkan sejumlah kecil di kolom “Deposit” dan klik tombol:

Cara Membangun, Menerapkan, dan Menguji Waves RIDE dApp
Waves Keeper meminta izin untuk menandatangani InvokeScriptTransaction dengan pembayaran 10 WAVES.

6. Konfirmasi transaksi:

Cara Membangun, Menerapkan, dan Menguji Waves RIDE dApp
Transaksi dibuat dan disiarkan ke jaringan. Sekarang Anda dapat melihat ID-nya

7. Pantau transaksi menggunakan Waves Explorer. Masukkan ID pada kolom pencarian

Cara Membangun, Menerapkan, dan Menguji Waves RIDE dApp

Kesimpulan dan informasi tambahan

Kami melihat alat untuk mengembangkan, menguji, menerapkan, dan menggunakan dApps sederhana di Platform Waves:

  • bahasa NAIK
  • Editor Kode VS
  • Penjelajah Gelombang
  • Papan luncur
  • Penjaga Ombak

Link bagi yang ingin terus belajar RIDE:

Contoh lainnya
IDE online dengan contoh
Dokumentasi Gelombang
Obrolan pengembang di Telegram
Gelombang dan RIDE di stackoverflow
BARU! Kursus online tentang cara membuat dApps di Platform Waves

Lanjutkan mendalami topik RIDE dan buat dApp pertama Anda!

TL; DR: bit.ly/2YCFnwY

Sumber: www.habr.com

Tambah komentar