Diajar nyerat kontrak pinter Waves dina RIDE sareng RIDE4DAPPS. Bagian 1 (Dompét multi-pamaké)

Diajar nyerat kontrak pinter Waves dina RIDE sareng RIDE4DAPPS. Bagian 1 (Dompét multi-pamaké)

Hello dulur!

Nu leuwih anyar, Waves Labs ngumumkeun kompetisi pikeun pamekar dedicated ka sékrési extension basa kontrak pinter RIDE pikeun aplikasi desentralisasi Ride4Dapps kana jaringan test!

Urang milih kasus DAO sabab Ventuary rencana pikeun ngembangkeun dApps kalawan fungsi sosial: voting, fundraising, manajemén trust, jsb.
Urang mimitian ku conto basajan dina sesi Q&A jeung numpak IDE - conto jeung dompét dibagikeun.

Hayu urang nempo conto ieu, nguji hipotesis jeung kasampak di sababaraha oddities:

Hayu urang gaduh Alice - Pamilik dApp
Boob sareng Cooper mangrupikeun mitra Alice, pendiri Alice-BC DAO
Neli téh boga usaha anu butuh waragad
Bank - bank anu ngadistribusikaeun token

Tahap 1. Initialization of balances

Pikeun nampi token dina jaringan uji gelombang, anjeun kedah ngahubungi keran jeung nunjukkeun alamat nu ngirim tokens.
Anjeun tiasa mendakan alamatna dina IDE ku muka detil akun anjeun.
Kami nyorot Bank 10 GELOMBANG. Teras we pariksa yen aranjeunna anjog ngaliwatan blok na urus browser: resensi

Ayeuna hayu urang ngadistribusikaeun token ti bank ka sesa pamilon. (Catetan: Sadaya transaksi dina jaringan gelombang henteu gratis, ku kituna kasaimbangan positip minimum diperyogikeun pikeun sadaya pamilon pikeun ngalakukeun transaksi).

1 GELOMBANG = 100000000 unit (gelombang), sabab jumlahna ngan ukur integer.
0.01 GELOMBANG (Biaya Transaksi) = 1000000

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

Kami pariksa yén env.SEED ti mana transaksi ditandatanganan cocog sareng Bank kami:
Diajar nyerat kontrak pinter Waves dina RIDE sareng RIDE4DAPPS. Bagian 1 (Dompét multi-pamaké)

Upami anjeun teu gaduh frasa cikal anu cocog, pindah ka éta dina tab Akun sareng parios deui.
Saatos ieu, urang nyiptakeun, ngumumkeun sareng nandatanganan transaksi pikeun transfer 3 WAVES Alice.
Anjeun oge bisa manggihan data Alice ngaliwatan variabel env.accounts. Panomeran dimimitian ti 0, jadi Alice env.accounts[1].
Diajar nyerat kontrak pinter Waves dina RIDE sareng RIDE4DAPPS. Bagian 1 (Dompét multi-pamaké)

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

Hasilna ogé tiasa dititénan dina browser, tautan kana éta bakal dipulangkeun ka kami langsung saatos palaksanaan transaksi.

Urang pastikeun yén kasaimbangan Alice urang replenished ku 3 GELOMBANG, sarta kasaimbangan bank tetep dina 10 - 3 - 0.01 = 0.699.
Diajar nyerat kontrak pinter Waves dina RIDE sareng RIDE4DAPPS. Bagian 1 (Dompét multi-pamaké)

Diajar nyerat kontrak pinter Waves dina RIDE sareng RIDE4DAPPS. Bagian 1 (Dompét multi-pamaké)

Kami ngirimkeun Boob sareng Cooper 3 GELOMBANG masing-masing, sareng Neli, Xena sareng Mark 0.2 GELOMBANG masing-masing dina cara anu sami.
(Catetan: Urang nyieun kasalahan hiji karakter tur dikirim Neli 0.02 WAVES. Ati-ati!)

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

Saatos ngeusian kasaimbangan sadaya pamilon, urang tingali:
Diajar nyerat kontrak pinter Waves dina RIDE sareng RIDE4DAPPS. Bagian 1 (Dompét multi-pamaké)

Tahap 2. Jieun akun dApp

Kami sapuk yén Alice bakal janten panyipta sareng gaduh aplikasi desentralisasi.
Pindah ka Akun, atur janten SEED sareng pariksa env.SEED cocog sareng Alice.

Hayu urang coba masang skrip pangbasajanna (kontrak) dina akun Alice.
Kontak pinter dina Waves mangrupakeun predikat anu ngalarang atawa ngidinan sagala jinis transaksi kaluar lumangsung dina kaayaan nu tangtu. Dina hal ieu, kaayaan ieu salawasna. Kode kontrak leres. Nelepon nyebarkeun ().

Diajar nyerat kontrak pinter Waves dina RIDE sareng RIDE4DAPPS. Bagian 1 (Dompét multi-pamaké)

Fee per transaksi setScript 1400000/100000000 = 0.014 GELOMBANG. Alice ngagaduhan 2.986 GELOMBANG dina kasaimbangan na.

Hayu urang ayeuna coba masang logika kontrak pinter leuwih kompleks dina akun Alice, dijelaskeun dina conto

Ride4Dapps ayeuna kalebet 2 jinis anotasi énggal:

  1. @Callable(i) - nyokot salaku parameter i, data ngeunaan nu akun disebut / ditandatanganan urus. Hasil tina fungsi ieu anu nangtukeun parobahan dina kaayaan akun dApp. Akun anu sanés tiasa nyiptakeun transaksi sareng ngalaksanakeun fungsi kalayan anotasi ieu sareng ngarobih kaayaan akun dApp.
  2. @Verifier(tx) - Verifier transaksi sareng parameter tx transaksi. Cocog jeung logika predikat ti RIDE. Dina ekspresi ieu anjeun tiasa ngijinkeun atanapi nyaram parobahan salajengna kana logika kontrak pinter dina akun dApp.

Hayu urang ngalakukeun dappa akun salaku dompét umum pikeun sakabéh pamilon.
Diajar nyerat kontrak pinter Waves dina RIDE sareng RIDE4DAPPS. Bagian 1 (Dompét multi-pamaké)

Pikeun mariksa kontrak mana anu ayeuna aktip dina akun anjeun, anjeun tiasa nyalin kode base64 tina kontrak pinter dina blok explorer sareng ngakuanana nganggo decompiler (contona)
Diajar nyerat kontrak pinter Waves dina RIDE sareng RIDE4DAPPS. Bagian 1 (Dompét multi-pamaké)
Diajar nyerat kontrak pinter Waves dina RIDE sareng RIDE4DAPPS. Bagian 1 (Dompét multi-pamaké)
Diajar nyerat kontrak pinter Waves dina RIDE sareng RIDE4DAPPS. Bagian 1 (Dompét multi-pamaké)

Kami mastikeun yén logika kontrak pinter cocog sareng anu kami ngarepkeun.
Alice ngagaduhan 2.972 GELOMBANG dina kasaimbangan na.

dApp Ieu ngalacak sabaraha unggal pamilon nyumbang kana dana umum ngaliwatan mékanisme a transaksi data - DataEntry (currentKey, newAmount), dimana currentKey nyaéta akun nu nelepon fungsi deposit, sarta newAmount nyaeta nilai kasaimbangan replenished.

Boob sareng Cooper ngadamel depositna ka akun dApp kalayan 1 GELOMBANG.
Diajar nyerat kontrak pinter Waves dina RIDE sareng RIDE4DAPPS. Bagian 1 (Dompét multi-pamaké)

Urang nyieun kasalahan jeung urus teu ngaliwatan. Kusabab, sanajan kanyataan yén kami yakin yén kami ngalakukeun transaksi atas nama Bob, urang nyieun kasalahan dina indéks jeung nunjukkeun rekening Bank nu teu boga kontrak pinter. Perhatoskeun titik anu penting di dieu - aya biaya pikeun usaha anu gagal pikeun ngamimitian transaksi teu bisa dipiceun! Alice ngagaduhan 2.972 GELOMBANG dina kasaimbangan na. Bob boga 3 GELOMBANG.

Bob ngirimkeun 1 WAVES ka Akun dApp.

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

Diajar nyerat kontrak pinter Waves dina RIDE sareng RIDE4DAPPS. Bagian 1 (Dompét multi-pamaké)

Bob boga 1.99 WAVES ditinggalkeun. Nyaéta, Bob mayar komisi 0.01 WAVES

Diajar nyerat kontrak pinter Waves dina RIDE sareng RIDE4DAPPS. Bagian 1 (Dompét multi-pamaké)

Alice ngagaduhan 2.972 GELOMBANG dina kasaimbanganna, ayeuna éta 3.972. A urus ieu ogé didaptarkeun dina akun Alice, tapi euweuh komisi ieu boga muatan tina Akun dApp (Alice).
Saatos Cooper ogé ngeusian akun éta, kasaimbangan Alice janten 4.972 GELOMBANG.

Diajar nyerat kontrak pinter Waves dina RIDE sareng RIDE4DAPPS. Bagian 1 (Dompét multi-pamaké)

Anjeun tiasa mendakan saha anu gaduh sabaraha WAVES dina dompét umum dina blok explorer dina tab Data.

Cooper robah pikiran ngeunaan ninggalkeun jumlah 1 GELOMBANG dina dompét umum sarta mutuskeun pikeun mundur satengah tina pangirut. Jang ngalampahkeun ieu, anjeunna kedah nyauran fungsi mundur.

Diajar nyerat kontrak pinter Waves dina RIDE sareng RIDE4DAPPS. Bagian 1 (Dompét multi-pamaké)

Najan kitu, urang éta salah deui, saprak fungsi ditarikna boga parameter lengkep beda jeung signature béda. Nalika anjeun mendesain kontrak pinter dina RIDE4DAPPS anjeun kedah nengetan titik ieu

Diajar nyerat kontrak pinter Waves dina RIDE sareng RIDE4DAPPS. Bagian 1 (Dompét multi-pamaké)

Cooper ayeuna gaduh 2.48 WAVES dina neraca na. Sasuai, 3 GELOMBANG - 1 - 0.01, lajeng + 0.5 - 0.01. Sasuai, unggal panggero pikeun deposit na mundur waragad 0.01 WAVES. Hasilna, éntri dina tabel pamilik dApps robih sapertos kieu.

Diajar nyerat kontrak pinter Waves dina RIDE sareng RIDE4DAPPS. Bagian 1 (Dompét multi-pamaké)

Bob ogé mutuskeun pikeun narik sababaraha duit tina dompét dibagikeun, tapi nyieun kasalahan sarta diusahakeun mundur 1.5 gelombang.

Diajar nyerat kontrak pinter Waves dina RIDE sareng RIDE4DAPPS. Bagian 1 (Dompét multi-pamaké)

Nanging, kontrak pinter ngagaduhan cek pikeun kaayaan ieu.

Xena mangrupikeun scammer, anjeunna nyobian mundur 1 GELOMBANG tina total akun.

Diajar nyerat kontrak pinter Waves dina RIDE sareng RIDE4DAPPS. Bagian 1 (Dompét multi-pamaké)

Éta ogé henteu hasil pikeun anjeunna.

Dina bagian salajengna, urang bakal ningali masalah anu langkung kompleks anu aya hubunganana sareng kasampurnaan Akun Alice dApp.

sumber: www.habr.com

Tambahkeun komentar