Waves blockchain-en kode irekiko afiliatu programa deszentralizatua

Waves blockchain-en afiliatu programa deszentralizatua, Bettex taldeak Waves Labs bekaren barruan ezarria.

Mezua ez da publizitatea! Programa kode irekikoa da, bere erabilera eta banaketa doakoak dira. Programaren erabilerak dApp aplikazioen garapena sustatzen du eta, oro har, deszentralizazioa sustatzen du, Interneteko erabiltzaile orori mesede egiten diona.

Waves blockchain-en kode irekiko afiliatu programa deszentralizatua

Aurkeztutako dApp kidea programetarako txantiloia da afiliatua beren funtzionalitatearen parte gisa barne hartzen duten proiektuetarako. Kodea kopiatzeko txantiloi gisa, liburutegi gisa edo inplementazio teknikorako ideia multzo gisa erabil daiteke.

Funtzionalitateari dagokionez, afiliatu sistema arrunta da, erreferentzia batekin erregistratzea, erreferentzietarako sarien maila anitzeko metaketa eta sisteman erregistratzeko motibazioa (cashback) ezartzen duena. Sistema dApp "purua" da, hau da, web aplikazioak zuzenean elkarreragiten du blockchain-arekin, bere backend, datu-base, etab.

Beste proiektu askotan ere erabilgarriak izan daitezkeen teknikak:

  • Kontu adimendun bati zorra deitzea berehalako amortizazioarekin (deia egiten den unean ez dago kontuan deia ordaintzeko tokenrik, baina hor agertzen dira deiaren ondorioz).
  • PoW-captcha - maiztasun handiko dei automatizatuen aurkako babesa kontu adimendunen funtzioetara - captcharen antzekoa, baina baliabide informatikoen erabileraren frogaren bidez.
  • Datu-gakoak kontsultatu txantiloi bat erabiliz.

Aplikazioa honako hauek osatzen dute:

  • kontu adimendunaren kodea ride4dapps hizkuntzan (aurreikusitako moduan, afiliatuen funtzionaltasuna ezarri behar den kontu adimendun nagusiarekin bateratzen dena);
  • WAVES NODE REST APIaren gainean abstrakzio maila inplementatzen duen js bilgarria;
  • vuejs esparruko kodea, liburutegia eta RIDE kodea erabiltzeko adibide bat da.

Deskriba ditzagun zerrendatutako ezaugarri guztiak.

Kontu adimendun batera deitzea zorra berehala itzultzeko

InvokeScript deitzeak transakzioa hasten duen kontutik kuota bat ordaintzea eskatzen du. Hau ez da arazoa beren kontuan WAVES token kopuru jakin bat duten blockchain-eko geekentzat proiektu bat egiten ari bazara, baina produktua publiko orokorrak erabiltzeko zuzenduta badago, arazo larria bihurtzen da. Azken finean, erabiltzaileak WAVES tokenak (edo transakzioak ordaintzeko erabil daitekeen beste aktibo egoki bat) erosteaz arduratu behar du, eta horrek proiektuan sartzeko dagoeneko oztopo handia areagotzen du. Aktibo bat banatu diezaiekegu transakzioak ordaintzeko eta erabilera okerraren arriskuari aurre egin ahal izango dioten erabiltzaileei, gure sistematik aktibo likido bat ponpatzeko sistema automatizatuak sortzen direnean.

Oso erosoa izango litzateke InvokeScript "hartzailearen kontura" deitzea posible balitz (scripta instalatuta dagoen kontu adimenduna), eta aukera hori badago, modu agerikoa ez den arren.

InvokeScript-en barruan ScriptTransfer bat egiten baduzu deitzailearen helbidera, gastatutako kuota-tokenak konpentsatzen dituena, dei hori arrakastatsua izango da, nahiz eta deiaren unean aktiborik ez zegoen deitzeko kontuan. Hau posible da transakzioa deitu ondoren, baino lehenago, transakzioak kreditu bidez egin ahal izateko token nahikoa egiaztatzea, berehalako itzulketaren menpe.

ScriptTransfer(i.deitzailea, i.komisioa, unitatea)

Beheko kodeak gastatutako kuota itzultzen du kontu adimendunen funtsak erabiliz. Funtzio hau gaizki erabiltzearen aurka babesteko, beharrezkoa da deitzaileak kuota behar den aktiboan gastatzen duela egiaztatzea eta arrazoizko mugetan:

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
}

Gainera, funtsen xahuketa gaizto eta zentzugabetik babesteko, deien babes automatikoa (PoW-captcha) beharrezkoa da.

PoW-captcha

Lanaren froga-captcharen ideia bera ez da berria eta dagoeneko hainbat proiektutan ezarri da, WAVES-en oinarrituta inplementatutakoetan barne. Ideia da gure proiektuaren baliabideak kontsumitzen dituen ekintza bat egiteko, deitzaileak bere baliabideak ere gastatu behar dituela, eta horrek baliabideak agortzeko erasoa nahiko garestia da. Transakzioaren igorleak PoW arazoa konpondu duela egiaztatzeko oso erraz eta kostu baxuko baliozkotze baterako, transakzioen ID egiaztapena dago:

take(toBase58String(i.transactionId), 3) != "123" ondoren bota ("lanaren froga huts egin du") bestela

Transakzio bat egiteko, deitzaileak halako parametroak hautatu behar ditu, bere base58 kodea (id) 123 zenbakiekin hasi dadin, prozesadorearen denboraren bataz beste hamarnaka segundo batzuei dagokiena eta, oro har, gure zereginerako arrazoizkoa dena. PoW sinpleagoa edo konplexuagoa behar bada, zeregina modu argi batean erraz alda daiteke.

Datu-gakoak kontsultatu txantiloi bat erabiliz

Blockchain datu-base gisa erabiltzeko, ezinbestekoa da txantiloietan oinarritutako datu-basea gako-val gisa kontsultatzeko API tresnak izatea. 2019ko uztailaren hasieran parametro moduan agertu zen halako tresna-kit ?partidak REST API eskaeran /addresses/data?matches=regexp. Orain, web-aplikazio batetik gako bat baino gehiago lortu behar baditugu eta ez gako guztiak aldi berean, talde batzuk baizik, orduan gako-izenaren arabera hautaketa bat egin dezakegu. Adibidez, proiektu honetan, erretiratzeko transakzioak honela kodetzen dira

withdraw_${userAddress}_${txid}

horri esker, edozein helbidetako funtsak kentzeko transakzioen zerrenda jaso dezakezu txantiloia erabiliz:

?matches=withdraw_${userAddress}_.*

Orain ikus ditzagun amaitutako soluzioaren osagaiak.

Vuejs kodea

Kodea benetako proiektutik hurbil dagoen lan-demo bat da. Waves Keeper-en bidez saioa inplementatzen du eta affiliate.js liburutegiarekin lan egiten du, eta horrekin erabiltzailea sisteman erregistratzen du, transakzioen datuak kontsultatzen ditu eta irabazitako funtsak erabiltzailearen kontura ateratzeko aukera ematen du.

Waves blockchain-en kode irekiko afiliatu programa deszentralizatua

RIDErako kodea

Erregistro, finantzaketa eta erretiratzeko funtzioek osatzen dute.

Erregistratzeko funtzioak erabiltzaile bat erregistratzen du sisteman. Bi parametro ditu: erreferentzia (erreferentzia-helbidea) eta funtzio-kodean erabiltzen ez den gatz-parametroa, transakzio-id (PoW-captcha ataza) hautatzeko beharrezkoa dena.

Funtzioak (proiektu honetako beste funtzio batzuk bezala) zorra deitzeko teknika erabiltzen du, funtzioaren emaitza funtzio hau deitzeagatik kuota baten ordainketa finantzatzea da. Irtenbide horri esker, zorro bat sortu berri duen erabiltzaileak berehala lan egin dezake sistemarekin eta ez du kezkatu behar transakzio-kuota bat ordaintzeko aukera ematen dion aktibo bat erosteko edo jasotzeaz.

Erregistro-funtzioaren emaitza bi erregistro dira:

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

Honek aurrera eta alderantzizko bilaketak ahalbidetzen ditu (erabiltzaile jakin baten erreferentzia eta erabiltzaile jakin baten erreferentzia guztiak).

Funtsaren funtzioa benetako funtzionaltasuna garatzeko txantiloi bat da. Aurkezten den moduan, transakzioak transferitutako funts guztiak hartzen ditu eta 1, 2, 3 mailetako erreferenteen kontuetara banatzen ditu, "cashback" kontura eta "aldaketa" kontura (aurrekoetara banatzean geratzen dena). kontuak hemen doa).

Cashback azken erabiltzailea erreferentzia-sisteman parte hartzera motibatzeko bitarteko bat da. Erabiltzaileak sistemak "cashback" moduan ordaintzen duen komisioaren zatia erretiratu dezake erreferentzietarako sariak bezala.

Erreferentzia-sistema bat erabiltzean, funtsaren funtzioa aldatu eta sistemak funtzionatuko duen kontu adimendunaren logika nagusian integratu behar da. Esate baterako, erreferentzia-saria ordaintzen bada egindako apustu batengatik, funtsaren funtzioa apustua egiten den logikan sartu beharko litzateke (edo saria ordaintzen den helburuko beste ekintza bat egiten da). Erreferentzia-sarien hiru maila kodetzen dira funtzio honetan. Maila gehiago edo gutxiago egin behar badituzu, hori ere kodean zuzentzen da. Sari-ehunekoa maila1-maila3 konstanteek ezartzen dute; kodean honela kalkulatzen da zenbatekoa * maila / 1000, hau da, 1 balioa %0,1ari dagokio (kodean ere alda daiteke).

Funtzioari deitzeak kontuaren saldoa aldatzen du eta sarrerak ere sortzen ditu inprimakian erregistratzeko:

fund_address_txid = address:owner:inc:level:timestamp
Для получСния timestamp (Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ) ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ такая Π²ΠΎΡ‚ связка
func getTimestamp() = {
let block = extract(blockInfoByHeight(height))
toString(block.timestamp)
}

Hau da, transakzio-denbora kokatzen den blokearen denbora da. Hau transakzioaren beraren denbora-zigilua erabiltzea baino fidagarriagoa da, batez ere deigarritik eskuragarri ez dagoelako.
Erretiratzeko funtzioak metatutako sari guztiak erakusten ditu erabiltzailearen kontuan. Sarrerak sortzen ditu erregistro-helburuetarako:

# withdraw log: withdraw_user_txid=amount:timestamp

Eskaera

Aplikazioaren zati nagusia affiliate.js liburutegia da, afiliatuen datu-ereduen eta WAVES NODE REST APIaren arteko zubi bat dena. Abstrakzio maila inplementatzen du esparrutik independentea (edozein erabil daiteke). Funtzio aktiboek (erregistratu, kendu) Waves Keeper sisteman instalatuta dagoela suposatzen dute; liburutegiak berak ez du hori egiaztatzen.

Inplementatzeko metodoak:

fetchReferralTransactions
fetchWithdrawTransactions
fetchMyBalance
fetchReferrals
fetchReferer
withdraw
register

Metodoen funtzionaltasuna agerikoa da izenetatik; parametroak eta itzulitako datuak kodean deskribatzen dira. Erregistro-funtzioak iruzkin gehigarriak behar ditu - transakzio IDa hautatzeko ziklo bat hasten du 123-n hasteko - hau goian deskribatutako PoW-captcha da, erregistro masiboetatik babesten duena. Funtzioak behar den IDarekin transakzio bat aurkitzen du eta, ondoren, Waves Keeper bidez sinatzen du.

DEX afiliatu programa helbidean dago eskuragarri GitHub.com.

Iturria: www.habr.com

Gehitu iruzkin berria