Programm ta 'affiljat deċentralizzat ta' sors miftuħ fuq il-blockchain Waves

Programm ta 'affiljat deċentralizzat fuq il-blockchain Waves, implimentat bħala parti minn għotja ta' Waves Labs mit-tim Bettex.

Il-post mhux reklamar! Il-programm huwa sors miftuħ, l-użu u d-distribuzzjoni tiegħu huma b'xejn. L-użu tal-programm jistimula l-iżvilupp ta 'applikazzjonijiet dApp u ġeneralment jippromwovi d-deċentralizzazzjoni, li tibbenefika kull utent tal-Internet.

Programm ta 'affiljat deċentralizzat ta' sors miftuħ fuq il-blockchain Waves

Id-dApp ippreżentata għall-programmi ta 'affiljat hija mudell għal proġetti li jinkludu affiljat bħala parti mill-funzjonalità tagħhom. Il-kodiċi jista 'jintuża bħala mudell għall-ikkupjar, bħala librerija, jew bħala sett ta' ideat għall-implimentazzjoni teknika.

F'termini ta 'funzjonalità, din hija sistema ta' affiljat regolari li timplimenta reġistrazzjoni ma 'referrer, akkumulazzjoni ta' premjijiet f'diversi livelli għal riferimenti u motivazzjoni għar-reġistrazzjoni fis-sistema (cashback). Is-sistema hija dApp "pura", jiġifieri, l-applikazzjoni tal-web tinteraġixxi direttament mal-blockchain, mingħajr ma jkollha backend, database, eċċ.

Tekniki użati li jistgħu jkunu utli wkoll f'ħafna proġetti oħra:

  • Sejħa ta 'kont intelliġenti f'dejn b'ħlas lura immedjat (fil-ħin tas-sejħa m'hemm l-ebda tokens fuq il-kont biex tħallas għas-sejħa, iżda jidhru hemm bħala riżultat tas-sejħa).
  • PoW-captcha - protezzjoni kontra sejħiet awtomatizzati ta 'frekwenza għolja għal funzjonijiet ta' kont intelliġenti - analogu għal captcha, iżda permezz ta 'prova tal-użu tar-riżorsi tal-kompjuter.
  • Mistoqsija għaċ-ċwievet tad-dejta billi tuża mudell.

L-applikazzjoni tikkonsisti minn:

  • kodiċi tal-kont intelliġenti fil-lingwa ride4dapps (li, kif ippjanat, huwa magħqud fil-kont intelliġenti ewlieni li għalih jeħtieġ li tiġi implimentata l-funzjonalità tal-affiljat);
  • js wrapper li jimplimenta livell ta 'estrazzjoni fuq l-API WAVES NODE REST;
  • kodiċi fuq il-qafas vuejs, li huwa eżempju ta 'użu tal-librerija u l-kodiċi RIDE.

Ejja niddeskrivu l-karatteristiċi kollha elenkati.

Sejħa għal kont intelliġenti għal dejn b'ħlas lura immedjat

Is-sejħa ta' InvokeScript teħtieġ ħlas ta' tariffa mill-kont li jibda t-tranżazzjoni. Din mhix problema jekk qed tagħmel proġett għal geeks blockchain li għandhom ċertu ammont ta 'WAVES tokens fuq il-kont tagħhom, iżda jekk il-prodott ikun immirat għall-użu mill-pubbliku ġenerali, din issir problema serja. Wara kollox, l-utent għandu jieħu ħsieb li jixtri tokens WAVES (jew assi adattat ieħor li jista 'jintuża biex iħallas għal tranżazzjonijiet), li jżid l-ostaklu diġà konsiderevoli għad-dħul fil-proġett. Nistgħu nqassmu assi lil utenti li jkunu jistgħu jħallsu għat-tranżazzjonijiet u jiffaċċjaw ir-riskju tal-użu ħażin tagħhom meta jinħolqu sistemi awtomatizzati biex ipompjaw assi likwidu mis-sistema tagħna.

Ikun konvenjenti ħafna kieku kien possibbli li ssejjaħ InvokeScript "bis-spejjeż tar-riċevitur" (il-kont intelliġenti li fuqu huwa installat l-iskript), u tali possibbiltà, għalkemm mhux b'mod ovvju, teżisti.

Jekk ġewwa InvokeScript tagħmel ScriptTransfer lejn l-indirizz ta 'min iċempel, li jikkumpensa għat-tokens tal-miżati li jintefqu, allura sejħa bħal din tkun ta' suċċess, anke jekk fil-ħin tas-sejħa ma kien hemm l-ebda assi fuq il-kont tas-sejħa. Dan huwa possibbli minħabba li l-verifika għal tokens suffiċjenti ssir wara li tissejjaħ it-tranżazzjoni, aktar milli qabel, sabiex it-tranżazzjonijiet ikunu jistgħu jsiru fuq kreditu, soġġett għal ħlas lura immedjat.

ScriptTransfer(i.sejħiet, i.tariffa, unità)

Il-kodiċi hawn taħt jirrimborża l-miżata minfuqa bl-użu ta 'fondi ta' kont intelliġenti. Biex tipproteġi kontra l-użu ħażin ta' din il-karatteristika, huwa meħtieġ li tuża verifika li min iċempel jonfoq il-miżata fl-assi meħtieġ u f'limiti raġonevoli:

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
}

Ukoll, biex tipproteġi kontra ħela malizzjuża u bla sens ta 'fondi, hija meħtieġa protezzjoni awtomatika tas-sejħa (PoW-captcha).

PoW-captcha

L-idea stess ta 'prova tax-xogħol captcha mhijiex ġdida u diġà ġiet implimentata f'diversi proġetti, inklużi dawk implimentati fuq il-bażi ta' WAVES. L-idea hija li sabiex twettaq azzjoni li tikkonsma r-riżorsi tal-proġett tagħna, min iċempel irid ukoll jonfoq ir-riżorsi tiegħu stess, li jagħmel attakk ta 'tnaqqis tar-riżorsi pjuttost għoli. Għal validazzjoni faċli ħafna u bi prezz baxx li min jibgħat it-tranżazzjoni solva l-problema tal-PoW, hemm kontroll tal-id tat-tranżazzjoni:

jekk tieħu(toBase58String(i.transactionId), 3) != “123” imbagħad throw(“prova tax-xogħol falliet”) inkella

Sabiex iwettaq tranżazzjoni, min iċempel irid jagħżel parametri bħal dawn sabiex il-kodiċi bażi58 tiegħu (id) jibda bin-numri 123, li jikkorrispondi bħala medja għal ftit għexieren ta 'sekondi ta' ħin tal-proċessur u ġeneralment ikun raġonevoli għall-kompitu tagħna. Jekk ikun meħtieġ PoW aktar sempliċi jew aktar kumpless, allura l-kompitu jista 'jiġi mmodifikat faċilment b'mod ovvju.

Mistoqsija għaċ-ċwievet tad-dejta billi tuża mudell

Sabiex tuża blockchain bħala database, huwa vitali li jkun hemm għodod tal-API għall-mistoqsija tad-database bħala key-val ibbażata fuq mudelli. Sett ta 'għodda bħal din deher fil-bidu ta' Lulju 2019 fil-forma ta 'parametru ?logħbiet fuq it-talba REST API /indirizzi/data?matches=regexp. Issa, jekk irridu nġibu aktar minn ċavetta waħda minn applikazzjoni tal-web u mhux iċ-ċwievet kollha f'daqqa, iżda biss xi grupp, allura nistgħu nagħmlu għażla bl-isem taċ-ċavetta. Pereżempju, f'dan il-proġett, it-tranżazzjonijiet tal-irtirar huma kodifikati bħala

withdraw_${userAddress}_${txid}

li jippermettilek tikseb lista ta’ tranżazzjonijiet għall-irtirar ta’ fondi għal kwalunkwe indirizz partikolari billi tuża l-mudell:

?matches=withdraw_${userAddress}_.*

Issa ejja nħarsu lejn il-komponenti tas-soluzzjoni lesta.

Kodiċi Vuejs

Il-kodiċi huwa demo ta 'ħidma qrib il-proġett reali. Jimplimenta l-login permezz ta' Waves Keeper u jaħdem mal-librerija affiliate.js, li magħha jirreġistra lill-utent fis-sistema, jistaqsi d-dejta tat-tranżazzjonijiet, u jippermettilek ukoll li tirtira l-fondi li jkunu qalgħu fil-kont tal-utent.

Programm ta 'affiljat deċentralizzat ta' sors miftuħ fuq il-blockchain Waves

Kodiċi għal RIDE

Jikkonsisti fir-reġistru, jiffinanzja u jirtira funzjonijiet.

Il-funzjoni tar-reġistru tirreġistra utent fis-sistema. Għandu żewġ parametri: referer (indirizz referrer) u l-parametru tal-melħ, li ma jintużax fil-kodiċi tal-funzjoni, li huwa meħtieġ biex tagħżel l-id tat-tranżazzjoni (kompitu PoW-captcha).

Il-funzjoni (bħal funzjonijiet oħra minn dan il-proġett) tuża t-teknika tas-sejħa tad-dejn, ir-riżultat tal-funzjoni huwa li tiffinanzja l-ħlas ta 'miżata għas-sejħa ta' din il-funzjoni. Grazzi għal din is-soluzzjoni, utent li jkun għadu kemm ħoloq kartiera jista 'jaħdem immedjatament mas-sistema u m'għandux għalfejn jinkwieta dwar ix-xiri jew ir-riċeviment ta' assi li jippermettilu jħallas tariffa ta 'tranżazzjoni.

Ir-riżultat tal-funzjoni ta 'reġistrazzjoni huwa żewġ rekords:

${owner)_referer = referer
${referer}_referral_${owner} = owner

Dan jippermetti tfittxijiet bil-quddiem u b'lura (ir-referer ta' utent partikolari u r-referenzi kollha ta' utent partikolari).

Il-funzjoni tal-fond hija aktar mudell għall-iżvilupp tal-funzjonalità reali. Fil-forma ppreżentata tagħha, tieħu l-fondi kollha trasferiti mit-tranżazzjoni u tqassamhom lill-kontijiet tar-referers tal-livelli 1, 2, 3, lill-kont "cashback" u lill-kont "bidla" (dak kollu li jibqa 'meta jitqassam lil preċedenti kontijiet tmur hawn).

Il-cashback huwa mezz biex jimmotiva lill-utent aħħari biex jipparteċipa fis-sistema ta’ riferiment. L-utent jista 'jirtira l-parti tal-kummissjoni mħallsa mis-sistema fil-forma ta' "cashback" bl-istess mod bħal premjijiet għal referenzi.

Meta tuża sistema ta 'riferiment, il-funzjoni tal-fond għandha tiġi modifikata u integrata fil-loġika ewlenija tal-kont intelliġenti li fuqu se taħdem is-sistema. Pereżempju, jekk jitħallas premju ta’ riferiment għal imħatra li ssir, allura l-funzjoni tal-fond għandha tkun mibnija fil-loġika fejn titqiegħed l-imħatra (jew titwettaq azzjoni mmirata oħra li għaliha jitħallas il-premju). Tliet livelli ta' premjijiet ta' riferiment huma kkodifikati f'din il-funzjoni. Jekk għandek bżonn tagħmel aktar jew inqas livelli, allura dan huwa kkoreġut ukoll fil-kodiċi. Il-perċentwal tal-premju huwa stabbilit mill-kostanti level1-level3 fil-kodiċi li huwa kkalkulat; ammont * livell / 1000, jiġifieri, il-valur 1 jikkorrispondi għal 0,1% (dan jista 'wkoll jinbidel fil-kodiċi).

Is-sejħa tal-funzjoni tbiddel il-bilanċ tal-kont u toħloq ukoll entrati għall-finijiet ta' illoggjar tal-formola:

fund_address_txid = address:owner:inc:level:timestamp
Для получения timestamp (текущего времени) используется такая вот связка
func getTimestamp() = {
let block = extract(blockInfoByHeight(height))
toString(block.timestamp)
}

Jiġifieri, il-ħin tat-tranżazzjoni huwa l-ħin tal-blokk li jinsab fih. Dan huwa aktar affidabbli mill-użu tat-timestamp mit-tranżazzjoni nnifisha, speċjalment peress li mhuwiex disponibbli mill-callable.
Il-funzjoni tal-irtirar turi l-premjijiet kollha akkumulati fil-kont tal-utent. Joħloq entrati għal skopijiet ta' illoggjar:

# withdraw log: withdraw_user_txid=amount:timestamp

Applikazzjoni

Il-parti ewlenija tal-applikazzjoni hija l-librerija affiliate.js, li hija pont bejn il-mudelli tad-dejta tal-affiljati u l-API WAVES NODE REST. Jimplimenta livell ta' astrazzjoni indipendenti mill-qafas (jista' jintuża kwalunkwe wieħed). Funzjonijiet attivi (jirreġistra, jirtira) jassumu li Waves Keeper huwa installat fuq is-sistema l-librerija nnifisha ma tiċċekkjax dan.

Jimplimenta metodi:

fetchReferralTransactions
fetchWithdrawTransactions
fetchMyBalance
fetchReferrals
fetchReferer
withdraw
register

Il-funzjonalità tal-metodi hija ovvja mill-ismijiet il-parametri u d-dejta rritornata huma deskritti fil-kodiċi. Il-funzjoni tar-reġistru teħtieġ kummenti addizzjonali - tibda ċiklu ta 'għażla tal-id tat-tranżazzjoni sabiex tibda f'123 - dan huwa l-PoW-captcha deskritt hawn fuq, li jipproteġi kontra r-reġistrazzjonijiet tal-massa. Il-funzjoni ssib tranżazzjoni bl-id meħtieġa, u mbagħad tiffirmaha permezz ta' Waves Keeper.

Il-programm ta' affiljat DEX huwa disponibbli fuq GitHub.com.

Sors: www.habr.com

Żid kumment