Hello!
Baru-baru ini, Waves Labs
Kami memilih kasus DAO karena
Kami mulai dengan contoh sederhana di
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
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:
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:
οΏΌ
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].
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
Kami memastikan saldo Alice diisi ulang sebanyak 3 GELOMBANG, dan saldo bank tetap pada 10 - 3 - 0.01 = 0.699.
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:
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().
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
Ride4Dapps sekarang menyertakan 2 jenis anotasi baru:
- @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.
- @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.
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 (
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.
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 }]}))
Bob memiliki sisa 1.99 GELOMBANG. Artinya, Bob membayar komisi WAVES 0.01
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.
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.
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
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.
Bob juga memutuskan untuk menarik sejumlah uang dari dompet bersama, namun melakukan kesalahan dan mencoba menarik 1.5 WAVES.
Namun, kontrak pintar dapat mengatasi situasi ini.
Xena adalah penipu, dia mencoba menarik 1 WAVES dari total akun.
Itu juga tidak berhasil untuknya.
Di bagian selanjutnya, kita akan melihat masalah yang lebih kompleks terkait ketidaksempurnaan Akun Alice dApp.
Sumber: www.habr.com