DecentralizÄta saistÄ«tÄ programma Waves blokÄ·ÄdÄ, ko kÄ daļu no Waves Labs dotÄcijas ieviesusi Bettex komanda.
ZiÅa nav reklÄma! Programma ir atvÄrtÄ koda, tÄs izmantoÅ”ana un izplatÄ«Å”ana ir bezmaksas. Programmas izmantoÅ”ana stimulÄ dApp aplikÄciju izstrÄdi un kopumÄ veicina decentralizÄciju, kas nÄk par labu ikvienam interneta lietotÄjam.
PiedÄvÄtÄ dApp saistÄ«tajÄm programmÄm ir veidne projektiem, kuru funkcionalitÄte ietver filiÄli. Kodu var izmantot kÄ veidni kopÄÅ”anai, kÄ bibliotÄku vai ideju kopumu tehniskai realizÄcijai.
FunkcionalitÄtes ziÅÄ Å”Ä« ir parasta filiÄļu sistÄma, kas Ä«steno reÄ£istrÄciju ar novirzÄ«tÄju, daudzlÄ«meÅu atlÄ«dzÄ«bas uzkrÄÅ”anu par novirzÄ«Å”anu un motivÄciju reÄ£istrÄties sistÄmÄ (cashback). SistÄma ir ātÄ«raā dApp, tas ir, tÄ«mekļa lietojumprogramma mijiedarbojas tieÅ”i ar blokÄ·Ädi, bez savas aizmugursistÄmas, datu bÄzes utt.
IzmantotÄs metodes, kas var bÅ«t noderÄ«gas arÄ« daudzos citos projektos:
- Viedkonta ievilkÅ”ana parÄdÄ ar tÅ«lÄ«tÄju atmaksu (zvana brÄ«dÄ« kontÄ nav žetonu, lai samaksÄtu par zvanu, bet tie parÄdÄs zvana rezultÄtÄ).
- PoW-captcha - aizsardzÄ«ba pret augstfrekvences automatizÄtiem izsaukumiem uz viedkonta funkcijÄm - analogi captcha, bet ar skaitļoÅ”anas resursu izmantoÅ”anas pierÄdÄ«jumu.
- Pieprasiet datu atslÄgas, izmantojot veidni.
Pieteikums sastÄv no:
- viedkonta kods ride4dapps valodÄ (kas, kÄ plÄnots, tiek sapludinÄts galvenajÄ viedkontÄ, kuram nepiecieÅ”ams ieviest filiÄles funkcionalitÄti);
- js iesaiÅotÄjs, kas ievieÅ” abstrakcijas lÄ«meni, izmantojot WAVES NODE REST API;
- kods vuejs ietvarÄ, kas ir bibliotÄkas un RIDE koda izmantoÅ”anas piemÄrs.
Ä»aujiet mums aprakstÄ«t visas uzskaitÄ«tÄs funkcijas.
Zvaniet uz viedo kontu parÄdam ar tÅ«lÄ«tÄju atmaksu
Lai izsauktu InvokeScript, ir jÄmaksÄ nodeva no konta, kurÄ tiek uzsÄkts darÄ«jums. TÄ nav problÄma, ja veidojat projektu blokÄ·Ädes žekiem, kuru kontÄ ir noteikts daudzums WAVES žetonu, taÄu, ja produkts ir paredzÄts plaÅ”ai sabiedrÄ«bai, tÄ kļūst par nopietnu problÄmu. Galu galÄ lietotÄjam ir jÄrÅ«pÄjas par WAVES žetonu (vai cita piemÄrota aktÄ«va, ar kuru var norÄÄ·inÄties par darÄ«jumiem) iegÄdi, kas palielina jau tÄ ievÄrojamo barjeru iekļūŔanai projektÄ. MÄs varam izplatÄ«t aktÄ«vu lietotÄjiem, kuri varÄs maksÄt par darÄ«jumiem un saskarties ar risku, ka tie tiks ļaunprÄtÄ«gi izmantoti, ja tiks izveidotas automatizÄtas sistÄmas, lai izsÅ«knÄtu likvÄ«dus aktÄ«vus no mÅ«su sistÄmas.
BÅ«tu ļoti Ärti, ja InvokeScript bÅ«tu iespÄjams izsaukt āuz adresÄta rÄÄ·inaā (gudrais konts, kurÄ ir instalÄts skripts), un Å”Äda iespÄja, lai arÄ« ne acÄ«mredzamÄ veidÄ, pastÄv.
Ja InvokeScript ietvaros veicat ScriptTransfer uz zvanÄ«tÄja adresi, kas kompensÄ iztÄrÄtos maksas marÄ·ierus, tad Å”Äds zvans bÅ«s veiksmÄ«gs, pat ja zvana brÄ«dÄ« zvanÄ«tÄja kontÄ nebija lÄ«dzekļu. Tas ir iespÄjams, jo pÄrbaude, vai ir pietiekami daudz marÄ·ieru, tiek veikta pÄc darÄ«juma izsaukÅ”anas, nevis pirms tÄ, lai darÄ«jumus varÄtu veikt uz kredÄ«ta ar tÅ«lÄ«tÄju atmaksu.
ScriptTransfer (i.caller, i.fee, unit)
TÄlÄk norÄdÄ«tais kods atmaksÄ iztÄrÄto maksu, izmantojot viedkonta lÄ«dzekļus. Lai aizsargÄtu pret Ŕīs funkcijas ļaunprÄtÄ«gu izmantoÅ”anu, ir jÄpÄrbauda, āāvai zvanÄ«tÄjs iztÄrÄ maksu vajadzÄ«gajÄ lÄ«dzeklÄ« un saprÄtÄ«gÄs robežÄs:
func checkFee(i:Invocation) = {
if i.fee > maxFee then throw(āunreasonable large feeā) else
if i.feeAssetId != unit then throw(āfee must be in WAVESā) else true
}
TÄpat, lai aizsargÄtu pret ļaunprÄtÄ«gu un bezjÄdzÄ«gu lÄ«dzekļu izŔķÄrdÄÅ”anu, ir nepiecieÅ”ama automÄtiskÄ zvanu aizsardzÄ«ba (PoW-captcha).
PoW-captcha
Pati darba pierÄdÄ«juma captcha ideja nav jauna un jau ir realizÄta dažÄdos projektos, arÄ« tajos, kas Ä«stenoti uz WAVES bÄzes. Ideja ir tÄda, ka, lai veiktu darbÄ«bu, kas patÄrÄ mÅ«su projekta resursus, zvanÄ«tÄjam ir jÄtÄrÄ arÄ« savi resursi, kas resursu izsmelÅ”anas uzbrukumu padara diezgan dÄrgu. Lai ļoti viegli un lÄti pÄrbaudÄ«tu, vai darÄ«juma sÅ«tÄ«tÄjs ir atrisinÄjis PoW problÄmu, ir transakcijas ID pÄrbaude:
if take(toBase58String(i.transactionId), 3) != "123" then throw("pierÄdÄ«jums par darbu neizdevÄs") else
Lai veiktu darÄ«jumu, zvanÄ«tÄjam ir jÄizvÄlas tÄdi parametri, lai tÄ base58 kods (id) sÄktos ar cipariem 123, kas vidÄji atbilst pÄris desmitiem sekunžu procesora laika un kopumÄ ir saprÄtÄ«gs mÅ«su uzdevumam. Ja ir nepiecieÅ”ams vienkÄrÅ”Äks vai sarežģītÄks PoW, tad uzdevumu var viegli modificÄt acÄ«mredzamÄ veidÄ.
Pieprasiet datu atslÄgas, izmantojot veidni
Lai izmantotu blokÄ·Ädi kÄ datu bÄzi, ir ļoti svarÄ«gi, lai bÅ«tu API rÄ«ki datu bÄzes vaicÄjumam kÄ atslÄgas vÄrtÄ«bai, pamatojoties uz veidnÄm. Å Äds rÄ«ku komplekts parÄdÄ«jÄs 2019. gada jÅ«lija sÄkumÄ parametra veidÄ ?sÄrkociÅi pÄc REST API pieprasÄ«juma /addresses/data?matches=regexp. Tagad, ja mums ir jÄiegÅ«st vairÄk nekÄ viena atslÄga no tÄ«mekļa lietojumprogrammas un ne visas atslÄgas vienlaikus, bet tikai dažas grupas, mÄs varam veikt atlasi pÄc atslÄgas nosaukuma. PiemÄram, Å”ajÄ projektÄ izÅemÅ”anas darÄ«jumi tiek kodÄti kÄ
withdraw_${userAddress}_${txid}
kas ļauj iegÅ«t sarakstu ar darÄ«jumiem naudas izÅemÅ”anai uz jebkuru norÄdÄ«to adresi, izmantojot veidni:
?matches=withdraw_${userAddress}_.*
Tagad apskatÄ«sim gatavÄ risinÄjuma sastÄvdaļas.
Vuejs kods
Kods ir darba demonstrÄcija, kas ir tuvu reÄlajam projektam. Tas ievieÅ” pieteikÅ”anos caur Waves Keeper un strÄdÄ ar affiliate.js bibliotÄku, ar kuru tÄ reÄ£istrÄ lietotÄju sistÄmÄ, vaicÄ darÄ«jumu datus, kÄ arÄ« ļauj izÅemt nopelnÄ«tos lÄ«dzekļus lietotÄja kontÄ.
Kods RIDE
SastÄv no reÄ£istra, fondu un izÅemÅ”anas funkcijÄm.
ReÄ£istrÄcijas funkcija reÄ£istrÄ lietotÄju sistÄmÄ. Tam ir divi parametri: novirzÄ«tÄjs (novirzÄ«tÄja adrese) un sÄls parametrs, kas netiek izmantots funkcijas kodÄ, kas ir nepiecieÅ”ams, lai izvÄlÄtos darÄ«juma ID (PoW-captcha uzdevums).
FunkcijÄ (tÄpat kÄ citÄs Ŕī projekta funkcijÄs) tiek izmantota parÄdu izsaukÅ”anas tehnika, funkcijas rezultÄtÄ tiek finansÄta maksas samaksa par Ŕīs funkcijas izsaukÅ”anu. Pateicoties Å”im risinÄjumam, lietotÄjs, kurÅ” tikko izveidojis maku, var uzreiz strÄdÄt ar sistÄmu un viÅam nav jÄuztraucas par aktÄ«va iegÄdi vai saÅemÅ”anu, kas ļauj maksÄt transakcijas maksu.
ReÄ£istrÄcijas funkcijas rezultÄts ir divi ieraksti:
${owner)_referer = referer
${referer}_referral_${owner} = owner
Tas ļauj veikt meklÄÅ”anu uz priekÅ”u un atpakaļgaitu (noteikta lietotÄja novirzÄ«tÄjs un visi konkrÄtÄ lietotÄja novirzÄ«Å”anas gadÄ«jumi).
Fonda funkcija ir vairÄk kÄ veidne reÄlas funkcionalitÄtes attÄ«stÄ«bai. TÄ parÄdÄ«tajÄ formÄ Åem visus darÄ«juma pÄrskaitÄ«tos lÄ«dzekļus un sadala tos 1., 2., 3. lÄ«meÅa novirzÄ«tÄju kontos, naudas atmaksas kontÄ un izmaiÅu kontÄ (viss, kas paliek, sadalot uz iepriekÅ”Äjo konti ir Å”eit).
Cashback ir lÄ«dzeklis, kas motivÄ gala lietotÄju piedalÄ«ties novirzÄ«Å”anas sistÄmÄ. LietotÄjs var izÅemt sistÄmas samaksÄto komisijas daļu ācashbackā veidÄ tÄpat kÄ atlÄ«dzÄ«bas par novirzÄ«Å”anu.
Izmantojot novirzÄ«Å”anas sistÄmu, fonda funkcija ir jÄmaina un jÄintegrÄ viedkonta galvenajÄ loÄ£ikÄ, kurÄ sistÄma darbosies. PiemÄram, ja par izdarÄ«to likmi tiek izmaksÄta novirzÄ«Å”anas atlÄ«dzÄ«ba, fonda funkcija ir jÄiebÅ«vÄ loÄ£ikÄ, kurÄ tiek veikta likme (vai tiek veikta cita mÄrÄ·tiecÄ«ga darbÄ«ba, par kuru tiek izmaksÄta atlÄ«dzÄ«ba). Å ajÄ funkcijÄ ir iekodÄti trÄ«s novirzÄ«Å”anas atlÄ«dzÄ«bas lÄ«meÅi. Ja jums ir nepiecieÅ”ams izveidot vairÄk vai mazÄk lÄ«meÅu, tad arÄ« tas tiek labots kodÄ. AtlÄ«dzÄ«bas procentus nosaka 1. lÄ«meÅa 3. lÄ«meÅa konstantes kodÄ, kÄ tas tiek aprÄÄ·inÄts summa * lÄ«menis / 1000, tas ir, vÄrtÄ«ba 1 atbilst 0,1% (to var arÄ« mainÄ«t kodÄ).
Funkcijas izsaukÅ”ana maina konta atlikumu, kÄ arÄ« izveido ierakstus veidlapas reÄ£istrÄÅ”anas nolÅ«kos:
fund_address_txid = address:owner:inc:level:timestamp
ŠŠ»Ń ŠæŠ¾Š»ŃŃŠµŠ½ŠøŃ timestamp (ŃŠµŠŗŃŃŠµŠ³Š¾ Š²ŃŠµŠ¼ŠµŠ½Šø) ŠøŃŠæŠ¾Š»ŃŠ·ŃŠµŃŃŃ ŃŠ°ŠŗŠ°Ń Š²Š¾Ń ŃŠ²ŃŠ·ŠŗŠ°
func getTimestamp() = {
let block = extract(blockInfoByHeight(height))
toString(block.timestamp)
}
Tas ir, darÄ«juma laiks ir tÄ bloka laiks, kurÄ tas atrodas. Tas ir uzticamÄk nekÄ paÅ”a darÄ«juma laikspiedola izmantoÅ”ana, jo Ä«paÅ”i tÄpÄc, ka tas nav pieejams no izsaucamÄ.
IzÅemÅ”anas funkcija parÄda visas uzkrÄtÄs atlÄ«dzÄ«bas lietotÄja kontÄ. Izveido ierakstus reÄ£istrÄÅ”anas nolÅ«kos:
# withdraw log: withdraw_user_txid=amount:timestamp
Pieteikums
Lietojumprogrammas galvenÄ daļa ir affiliate.js bibliotÄka, kas ir tilts starp saistÄ«to datu modeļiem un WAVES NODE REST API. IevieÅ” no ietvara neatkarÄ«gu abstrakcijas lÄ«meni (var izmantot jebkuru). AktÄ«vÄs funkcijas (reÄ£istrÄties, izÅemt) pieÅem, ka sistÄmÄ ir instalÄts Waves Keeper, to nepÄrbauda pati bibliotÄka.
IevieÅ” metodes:
fetchReferralTransactions
fetchWithdrawTransactions
fetchMyBalance
fetchReferrals
fetchReferer
withdraw
register
Metožu funkcionalitÄte ir acÄ«mredzama no nosaukumiem, parametri un atgrieztie dati ir aprakstÄ«ti kodÄ. ReÄ£istra funkcijai ir nepiecieÅ”ami papildu komentÄri - tÄ sÄk transakcijas ID atlases ciklu tÄ, lai tas sÄkas ar 123 - tas ir iepriekÅ” aprakstÄ«tais PoW-captcha, kas aizsargÄ pret masveida reÄ£istrÄciju. Funkcija atrod darÄ«jumu ar nepiecieÅ”amo ID un pÄc tam paraksta to, izmantojot Waves Keeper.
DEX saistÄ«tÄ programma ir pieejama vietnÄ
Avots: www.habr.com