Pag-aaral na magsulat ng Waves smart contract sa RIDE at RIDE4DAPPS. Bahagi 1 (Multi-user wallet)

Pag-aaral na magsulat ng Waves smart contract sa RIDE at RIDE4DAPPS. Bahagi 1 (Multi-user wallet)

Kumusta sa lahat!

Higit pang mga kamakailan, Waves Labs inihayag kumpetisyon para sa mga developer na nakatuon sa pagpapalabas ng RIDE smart contract language extension para sa mga desentralisadong application Ride4Dapps sa network ng pagsubok!

Pinili namin ang kaso ng DAO dahil Ventuary planong bumuo ng mga dApp na may mga social function: pagboto, pangangalap ng pondo, pamamahala ng tiwala, atbp.
Nagsimula kami sa isang simpleng halimbawa sa Mga sesyon ng Q&A at RIDE IDE - halimbawa na may nakabahaging pitaka.

Tingnan natin ang halimbawang ito, subukan ang mga hypotheses at tingnan ang ilang mga kakaiba:

Hayaan kaming magkaroon ng Alice - May-ari ng dApp
Sina Boob at Cooper ay magkasosyo ni Alice, mga co-founder ng Alice-BC DAO
Si Neli ay isang business owner na nangangailangan ng financing
Bangko - isang bangko na namamahagi ng mga token

Stage 1. Pagsisimula ng mga balanse

Upang makatanggap ng mga token sa waves test network, kailangan mong makipag-ugnayan gripo at ipahiwatig ang address kung saan magpapadala ng mga token.
Mahahanap mo ang address sa IDE sa pamamagitan ng pagbubukas ng mga detalye ng iyong account.
Itinatampok namin ang Bank 10 WAVES. Pagkatapos ay tinitingnan namin na dumating sila sa pamamagitan ng block at browser ng transaksyon: tagasuri

Ngayon, ipamahagi natin ang mga token mula sa bangko sa iba pang kalahok. (Notes: Ang lahat ng mga transaksyon sa waves network ay hindi libre, kaya ang minimum na positibong balanse ay kinakailangan para sa lahat ng mga kalahok upang gumawa ng mga transaksyon).

1 WAVES = 100000000 units (wavelets), dahil ang mga halaga ay maaari lamang maging integer
0.01 WAVES (Bayad sa Transaksyon) = 1000000

Bangko -> [3 WAVES] -> Alice, sa pamamagitan ng TransferTransaction (Uri: 4).

Sinusuri namin na ang env.SEED kung saan nilagdaan ang mga transaksyon ay tumutugma sa aming Bangko:
Pag-aaral na magsulat ng Waves smart contract sa RIDE at RIDE4DAPPS. Bahagi 1 (Multi-user wallet)
οΏΌ
Kung wala kang katugmang seed na parirala, lumipat lang dito sa tab na Mga Account at suriin muli.
Pagkatapos nito, gumagawa kami, nag-anunsyo at pumirma ng transaksyon para sa paglipat ng 3 WAVES Alice.
Maaari mo ring malaman ang data ni Alice sa pamamagitan ng variable na env.accounts. Ang pagnunumero ay nagsisimula sa 0, kaya si Alice ay env.accounts[1].
Pag-aaral na magsulat ng Waves smart contract sa RIDE at RIDE4DAPPS. Bahagi 1 (Multi-user wallet)

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

Ang resulta ay maaari ding maobserbahan sa browser, ang isang link dito ay ibabalik sa amin kaagad pagkatapos ng pagpapatupad mga transaksyon.

Tinitiyak namin na ang balanse ni Alice ay mapupunan ng 3 WAVES, at ang balanse sa bangko ay mananatili sa 10 - 3 - 0.01 = 0.699.
Pag-aaral na magsulat ng Waves smart contract sa RIDE at RIDE4DAPPS. Bahagi 1 (Multi-user wallet)

Pag-aaral na magsulat ng Waves smart contract sa RIDE at RIDE4DAPPS. Bahagi 1 (Multi-user wallet)

Nagpapadala kami ng Boob at Cooper ng 3 WAVES bawat isa, at Neli, Xena at Mark 0.2 WAVES bawat isa sa parehong paraan.
(Mga Tala: Nagkamali kami ng isang character at nagpadala ng Neli 0.02 WAVES. Mag-ingat!)

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

Pagkatapos mapunan muli ang mga balanse ng lahat ng kalahok, makikita natin ang:
Pag-aaral na magsulat ng Waves smart contract sa RIDE at RIDE4DAPPS. Bahagi 1 (Multi-user wallet)

Stage 2. Gumawa ng dApp account

Sumang-ayon kami na si Alice ang magiging tagalikha at may-ari ng desentralisadong aplikasyon.
Pumunta sa Mga Account, itakda ito bilang SEED at tingnan ang env.SEED na tumutugma kay Alice.

Subukan nating i-install ang pinakasimpleng posibleng script (kontrata) sa account ni Alice.
Ang mga matalinong contact sa Waves ay mga predicate na nagbabawal o nagpapahintulot sa anumang uri ng papalabas na transaksyon na mangyari sa ilalim ng ilang partikular na kundisyon. Sa kasong ito, ang kondisyong ito ay LAGING. Ang code ng kontrata ay totoo. Call deploy().

Pag-aaral na magsulat ng Waves smart contract sa RIDE at RIDE4DAPPS. Bahagi 1 (Multi-user wallet)

Bayarin sa bawat setScript na transaksyon 1400000/100000000 = 0.014 WAVES. Si Alice ay may 2.986 WAVES na natitira sa kanyang balanse.

Subukan nating mag-install ng mas kumplikadong smart contract logic sa Alice account, na inilarawan sa isang halimbawa

Ride4Dapps may kasama na ngayong 2 bagong uri ng anotasyon:

  1. @Callable(i) β€” tumatagal bilang parameter i, data tungkol sa kung aling account ang tumawag/naglagdaan sa transaksyon. Ito ang resulta ng function na ito na tumutukoy sa pagbabago sa estado ng dApp account. Ang iba pang mga account ay maaaring gumawa ng mga transaksyon at magsagawa ng mga function sa annotation na ito at baguhin ang estado ng dApp account.
  2. @Verifier(tx) β€” Verifier ng transaksyon na may parameter na tx ng transaksyon. Tumutugma sa lohika ng panaguri mula sa RIDE. Sa expression na ito maaari mong payagan o ipagbawal ang mga karagdagang pagbabago sa lohika ng mga matalinong kontrata sa dApp account.

Gawin natin dApp account bilang isang karaniwang wallet para sa lahat ng kalahok.
Pag-aaral na magsulat ng Waves smart contract sa RIDE at RIDE4DAPPS. Bahagi 1 (Multi-user wallet)

Upang tingnan kung aling kontrata ang kasalukuyang aktibo sa iyong account, maaari mong kopyahin ang base64 code ng smart contract sa block explorer at kilalanin ito gamit ang isang decompiler (halimbawa)
Pag-aaral na magsulat ng Waves smart contract sa RIDE at RIDE4DAPPS. Bahagi 1 (Multi-user wallet)
Pag-aaral na magsulat ng Waves smart contract sa RIDE at RIDE4DAPPS. Bahagi 1 (Multi-user wallet)
Pag-aaral na magsulat ng Waves smart contract sa RIDE at RIDE4DAPPS. Bahagi 1 (Multi-user wallet)

Tinitiyak namin na ang lohika ng matalinong kontrata ay tumutugma sa inaasahan namin.
Si Alice ay may 2.972 WAVES na natitira sa kanyang balanse.

Sinusubaybayan ng dApp na ito kung magkano ang kontribusyon ng bawat kalahok sa karaniwang pondo sa pamamagitan ng isang mekanismo transaksyon ng data β€” DataEntry(currentKey, newAmount), kung saan ang currentKey ay ang account na tumatawag sa pag-andar ng deposito, at ang newAmount ay ang halaga ng na-replenished na balanse.

Nagdedeposito sina Boob at Cooper sa dApp account gamit ang 1 WAVES.
Pag-aaral na magsulat ng Waves smart contract sa RIDE at RIDE4DAPPS. Bahagi 1 (Multi-user wallet)

Nagkakamali tayo at hindi natuloy ang transaksyon. Dahil, sa kabila ng katotohanan na kumbinsido kami na gumagawa kami ng transaksyon sa ngalan ni Bob, nagkamali kami sa index at nagpahiwatig ng isang Bank account na walang matalinong kontrata. Ito ay nagkakahalaga na tandaan ang isang mahalagang punto dito - may bayad para sa mga hindi matagumpay na pagtatangka upang simulan ang mga transaksyon hindi maalis! Si Alice ay may 2.972 WAVES na natitira sa kanyang balanse. May 3 WAVES si Bob.

Nagpadala si Bob ng 1 WAVES sa dApp Account.

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

Pag-aaral na magsulat ng Waves smart contract sa RIDE at RIDE4DAPPS. Bahagi 1 (Multi-user wallet)

Si Bob ay may natitira pang 1.99 WAVES. Ibig sabihin, nagbayad si Bob ng 0.01 WAVES na komisyon

Pag-aaral na magsulat ng Waves smart contract sa RIDE at RIDE4DAPPS. Bahagi 1 (Multi-user wallet)

Si Alice ay may 2.972 WAVES sa kanyang balanse, ngayon ay 3.972 na. Isang transaksyon din ang nairehistro sa Alice account, ngunit walang komisyon na sinisingil mula sa dApp Account (Alice).
Matapos mapunan muli ni Cooper ang account, naging 4.972 WAVES ang balanse ni Alice.

Pag-aaral na magsulat ng Waves smart contract sa RIDE at RIDE4DAPPS. Bahagi 1 (Multi-user wallet)

Maaari mong malaman kung sino ang nagmamay-ari kung ilang WAVES sa karaniwang wallet sa block explorer sa tab na Data.

Nagbago ang isip ni Cooper tungkol sa pag-iwan ng halaga ng 1 WAVES sa pangkalahatang wallet at nagpasya na bawiin ang kalahati ng affinity. Para magawa ito, dapat niyang tawagan ang withdraw function.

Pag-aaral na magsulat ng Waves smart contract sa RIDE at RIDE4DAPPS. Bahagi 1 (Multi-user wallet)

Gayunpaman, muli kaming nagkamali, dahil ang withdraw function ay may ganap na magkakaibang mga parameter at ibang lagda. Kapag nagdidisenyo ka ng mga matalinong kontrata sa RIDE4DAPPS dapat mong bigyang pansin ang puntong ito

Pag-aaral na magsulat ng Waves smart contract sa RIDE at RIDE4DAPPS. Bahagi 1 (Multi-user wallet)

Ang Cooper ay mayroon na ngayong 2.48 WAVES sa balanse nito. Alinsunod dito, 3 WAVES - 1 - 0.01, at pagkatapos ay + 0.5 - 0.01. Alinsunod dito, ang bawat tawag para magdeposito at mag-withdraw ay nagkakahalaga ng 0.01 WAVES. Bilang resulta, ang mga entry sa talahanayan ng mga may-ari ng dApps ay nagbago bilang mga sumusunod.

Pag-aaral na magsulat ng Waves smart contract sa RIDE at RIDE4DAPPS. Bahagi 1 (Multi-user wallet)

Nagpasya din si Bob na mag-withdraw ng pera mula sa shared wallet, ngunit nagkamali at sinubukang mag-withdraw ng 1.5 WAVES.

Pag-aaral na magsulat ng Waves smart contract sa RIDE at RIDE4DAPPS. Bahagi 1 (Multi-user wallet)

Gayunpaman, ang matalinong kontrata ay may pagsusuri para sa sitwasyong ito.

Si Xena ay isang scammer, sinubukan niyang mag-withdraw ng 1 WAVES sa kabuuang account.

Pag-aaral na magsulat ng Waves smart contract sa RIDE at RIDE4DAPPS. Bahagi 1 (Multi-user wallet)

Hindi rin ito umubra sa kanya.

Sa susunod na bahagi, titingnan natin ang mas kumplikadong mga isyu na nauugnay sa di-kasakdalan ng Alice dApp Account.

Pinagmulan: www.habr.com

Magdagdag ng komento