Belajar menulis kontrak pintar Waves di RIDE dan RIDE4DAPPS. Bagian 1 (Dompet multi-pengguna)

Belajar menulis kontrak pintar Waves di RIDE dan RIDE4DAPPS. Bagian 1 (Dompet multi-pengguna)

Hello!

Baru-baru ini, Waves Labs diumumkan kompetisi untuk pengembang yang didedikasikan untuk peluncuran ekstensi bahasa kontrak pintar RIDE untuk aplikasi terdesentralisasi Ride4Dapps ke dalam jaringan pengujian!

Kami memilih kasus DAO karena Ventura berencana untuk mengembangkan dApps dengan fungsi sosial: pemungutan suara, penggalangan dana, manajemen kepercayaan, dll.
Kami mulai dengan contoh sederhana di Sesi tanya jawab ΠΈ Π² IDE NAIK - contoh dengan dompet bersama.

Mari kita lihat contoh ini, uji hipotesis dan lihat beberapa keanehan:

Mari kita memiliki Alice - Pemilik dApp
Boob dan Cooper adalah mitra Alice, salah satu pendiri Alice-BC DAO
Neli adalah seorang pemilik usaha yang membutuhkan pembiayaan
Bank - bank yang mendistribusikan token

Tahap 1. Inisialisasi saldo

Untuk menerima token di jaringan uji gelombang, Anda perlu menghubungi keran dan tunjukkan alamat tujuan pengiriman token.
Anda dapat menemukan alamatnya di IDE dengan membuka detail akun Anda.
Kami menyoroti Bank 10 GELOMBANG. Kemudian kami memeriksa apakah mereka tiba melalui browser blok dan transaksi: pengulas

Sekarang mari kita bagikan token dari bank ke peserta lainnya. (Catatan: Semua transaksi di jaringan wave tidak gratis, sehingga diperlukan minimal saldo positif bagi seluruh peserta untuk melakukan transaksi).

1 GELOMBANG = 100000000 unit (wavelet), karena jumlahnya hanya bisa berupa bilangan bulat
0.01 GELOMBANG (Biaya Transaksi) = 1000000

Bank -> [3 GELOMBANG] -> Alice, melalui TransferTransaction (Tipe: 4).

Kami memeriksa apakah env.SEED tempat transaksi ditandatangani cocok dengan Bank kami:
Belajar menulis kontrak pintar Waves di RIDE dan RIDE4DAPPS. Bagian 1 (Dompet multi-pengguna)
οΏΌ
Jika Anda tidak memiliki frase awal yang cocok, cukup alihkan ke frase tersebut di tab Akun dan periksa lagi.
Setelah ini, kami membuat, mengumumkan dan menandatangani transaksi untuk transfer 3 WAVES Alice.
Anda juga dapat mengetahui data Alice melalui variabel env.accounts. Penomoran dimulai dari 0, jadi Alice adalah env.accounts[1].
Belajar menulis kontrak pintar Waves di RIDE dan RIDE4DAPPS. Bagian 1 (Dompet multi-pengguna)

broadcast(transfer({recipient:address(env.accounts[1]), amount: 300000000, fee: 1000000}))

Hasilnya juga dapat diamati di browser, link ke sana akan dikembalikan kepada kami segera setelah eksekusi transaksi.

Kami memastikan saldo Alice diisi ulang sebanyak 3 GELOMBANG, dan saldo bank tetap pada 10 - 3 - 0.01 = 0.699.
Belajar menulis kontrak pintar Waves di RIDE dan RIDE4DAPPS. Bagian 1 (Dompet multi-pengguna)

Belajar menulis kontrak pintar Waves di RIDE dan RIDE4DAPPS. Bagian 1 (Dompet multi-pengguna)

Kami mengirimkan masing-masing Boob dan Cooper 3 WAVES, dan Neli, Xena, dan Mark masing-masing 0.2 WAVES dengan cara yang sama.
(Catatan: Kami membuat kesalahan satu karakter dan mengirimkan Neli 0.02 WAVES. Hati-hati!)

broadcast(transfer({recipient:address(env.accounts[4]), amount: 20000000, fee: 1000000}))

Setelah mengisi saldo semua peserta, kita melihat:
Belajar menulis kontrak pintar Waves di RIDE dan RIDE4DAPPS. Bagian 1 (Dompet multi-pengguna)

Tahap 2. Buat akun dApp

Kami sepakat bahwa Alice akan menjadi pencipta dan pemilik aplikasi terdesentralisasi.
Buka Akun, atur sebagai SEED dan periksa env.SEED cocok dengan Alice.

Mari kita coba memasang skrip (kontrak) yang paling sederhana di akun Alice.
Kontak pintar di Waves adalah predikat yang melarang atau mengizinkan segala jenis transaksi keluar terjadi dalam kondisi tertentu. Dalam hal ini, kondisi ini SELALU. Kode kontrak benar. Panggil penerapan().

Belajar menulis kontrak pintar Waves di RIDE dan RIDE4DAPPS. Bagian 1 (Dompet multi-pengguna)

Biaya per transaksi setScript 1400000/100000000 = 0.014 WAVES. Alice memiliki sisa 2.986 GELOMBANG di saldonya.

Sekarang mari kita coba memasang logika kontrak pintar yang lebih kompleks pada akun Alice, yang dijelaskan dalam contoh

Ride4Dapps sekarang menyertakan 2 jenis anotasi baru:

  1. @Dapat Dipanggil(i) β€” mengambil sebagai parameter i, data tentang akun mana yang memanggil/menandatangani transaksi. Hasil dari fungsi inilah yang menentukan perubahan status akun dApp. Akun lain dapat membuat transaksi dan menjalankan fungsi dengan anotasi ini dan mengubah status akun dApp.
  2. @Pemverifikasi(tx) β€” Pemverifikasi transaksi dengan parameter transaksi tx. Sesuai dengan logika predikat dari RIDE. Dalam ekspresi inilah Anda dapat mengizinkan atau melarang perubahan lebih lanjut pada logika kontrak pintar di akun dApp.

Ayo lakukan dApp akun sebagai dompet umum untuk semua peserta.
Belajar menulis kontrak pintar Waves di RIDE dan RIDE4DAPPS. Bagian 1 (Dompet multi-pengguna)

Untuk memeriksa kontrak mana yang saat ini aktif di akun Anda, Anda dapat menyalin kode base64 dari kontrak pintar di penjelajah blok dan mengenalinya menggunakan dekompiler (misalnya)
Belajar menulis kontrak pintar Waves di RIDE dan RIDE4DAPPS. Bagian 1 (Dompet multi-pengguna)
Belajar menulis kontrak pintar Waves di RIDE dan RIDE4DAPPS. Bagian 1 (Dompet multi-pengguna)
Belajar menulis kontrak pintar Waves di RIDE dan RIDE4DAPPS. Bagian 1 (Dompet multi-pengguna)

Kami memastikan bahwa logika kontrak pintar sesuai dengan yang kami harapkan.
Alice memiliki sisa 2.972 GELOMBANG di saldonya.

DApp ini melacak seberapa besar kontribusi setiap peserta terhadap dana bersama melalui suatu mekanisme transaksi data β€” DataEntry(currentKey, newAmount), di mana currentKey adalah akun yang memanggil fungsi deposit, dan newAmount adalah nilai saldo yang diisi ulang.

Boob dan Cooper melakukan deposit ke akun dApp dengan 1 WAVES.
Belajar menulis kontrak pintar Waves di RIDE dan RIDE4DAPPS. Bagian 1 (Dompet multi-pengguna)

Kami melakukan kesalahan dan transaksi tidak berhasil. Karena, meskipun kami yakin bahwa kami melakukan transaksi atas nama Bob, kami membuat kesalahan dalam indeks dan menunjukkan rekening Bank yang tidak memiliki kontrak pintar. Perlu diperhatikan poin penting di sini - ada biaya jika upaya yang gagal dalam memulai transaksi tidak dapat dihapus! Alice memiliki sisa 2.972 GELOMBANG di saldonya. Bob memiliki 3 GELOMBANG.

Bob mengirimkan 1 WAVES ke Akun dApp.

broadcast(invokeScript({dappAddress: address(env.accounts[1]), call:{function:"deposit",args:[]}, payment: [{amount: 100000000, asset:null }]}))

Belajar menulis kontrak pintar Waves di RIDE dan RIDE4DAPPS. Bagian 1 (Dompet multi-pengguna)

Bob memiliki sisa 1.99 GELOMBANG. Artinya, Bob membayar komisi WAVES 0.01

Belajar menulis kontrak pintar Waves di RIDE dan RIDE4DAPPS. Bagian 1 (Dompet multi-pengguna)

Alice mempunyai saldo 2.972 WAVES, sekarang menjadi 3.972. Transaksi juga telah terdaftar di akun Alice, namun tidak ada komisi yang dibebankan dari Akun dApp (Alice).
Setelah Cooper juga mengisi ulang akunnya, saldo Alice menjadi 4.972 WAVES.

Belajar menulis kontrak pintar Waves di RIDE dan RIDE4DAPPS. Bagian 1 (Dompet multi-pengguna)

Anda dapat mengetahui siapa pemilik berapa banyak WAVES di dompet umum di penjelajah blok di tab Data.

Cooper berubah pikiran tentang meninggalkan jumlah 1 WAVES di dompet umum dan memutuskan untuk menarik setengah dari afinitasnya. Untuk melakukan ini, ia harus memanggil fungsi penarikan.

Belajar menulis kontrak pintar Waves di RIDE dan RIDE4DAPPS. Bagian 1 (Dompet multi-pengguna)

Namun, kami salah lagi, karena fungsi penarikan memiliki parameter yang sangat berbeda dan tanda tangan yang berbeda. Saat Anda merancang kontrak pintar di RIDE4DAPPS Anda harus memperhatikan hal ini

Belajar menulis kontrak pintar Waves di RIDE dan RIDE4DAPPS. Bagian 1 (Dompet multi-pengguna)

Cooper sekarang memiliki 2.48 WAVES di neracanya. Dengan demikian, 3 GELOMBANG - 1 - 0.01, dan kemudian + 0.5 - 0.01. Oleh karena itu, setiap panggilan untuk menyetor dan menarik dikenakan biaya 0.01 WAVES. Akibatnya, entri dalam tabel pemilik dApps berubah sebagai berikut.

Belajar menulis kontrak pintar Waves di RIDE dan RIDE4DAPPS. Bagian 1 (Dompet multi-pengguna)

Bob juga memutuskan untuk menarik sejumlah uang dari dompet bersama, namun melakukan kesalahan dan mencoba menarik 1.5 WAVES.

Belajar menulis kontrak pintar Waves di RIDE dan RIDE4DAPPS. Bagian 1 (Dompet multi-pengguna)

Namun, kontrak pintar dapat mengatasi situasi ini.

Xena adalah penipu, dia mencoba menarik 1 WAVES dari total akun.

Belajar menulis kontrak pintar Waves di RIDE dan RIDE4DAPPS. Bagian 1 (Dompet multi-pengguna)

Itu juga tidak berhasil untuknya.

Di bagian selanjutnya, kita akan melihat masalah yang lebih kompleks terkait ketidaksempurnaan Akun Alice dApp.

Sumber: www.habr.com

Tambah komentar