Iepen boarne desintralisearre affiliate programma op 'e Waves blockchain

In desintralisearre affiliate programma basearre op de Waves blockchain, ymplementearre as ûnderdiel fan in Waves Labs subsydzje troch it Bettex team.

Post wurdt net sponsore! It programma is iepen boarne, it gebrûk en distribúsje is fergees. It gebrûk fan it programma stimulearret de ûntwikkeling fan dApp-applikaasjes en befoarderet yn 't algemien desintralisaasje, wat foardielich is foar elke brûker fan it netwurk.

Iepen boarne desintralisearre affiliate programma op 'e Waves blockchain

De presintearre dApp foar affiliate-programma's is in sjabloan foar projekten dy't affiliate omfetsje as ûnderdiel fan har funksjonaliteit. De koade kin brûkt wurde as sjabloan foar kopiearjen, as biblioteek, of as in set ideeën foar technyske ymplemintaasje.

Yn termen fan funksjonaliteit is dit in gewoan affiliatesysteem dat registraasje ymplementearret mei in ferwizer, opbou fan fergoeding op meardere nivo's foar ferwizings en motivaasje foar registraasje yn it systeem (cashback). It systeem is in "suvere" dApp, dat is, de webapplikaasje ynteraksje direkt mei de blockchain sûnder in eigen backend, database, ensfh.

Der wurde techniken brûkt dy't ek nuttich kinne wêze yn in protte oare projekten:

  • In tûk akkount oproppen op kredyt mei direkte werombetelling (op it momint fan 'e oprop binne d'r gjin tokens op' e rekken om te beteljen foar de oprop, mar se ferskine dêr as gefolch fan 'e oprop).
  • PoW-captcha - beskerming tsjin hege-frekwinsje automatisearre oprop fan smart account funksjes - fergelykber mei captcha, mar troch bewiis fan it brûken fan kompjûter boarnen.
  • Fersyk om gegevens kaaien troch sjabloan.

De applikaasje bestiet út:

  • smart account-koade yn 'e ride4dapps-taal (dy't, lykas pland, wurdt gearfoege yn it haad smart account, wêrfoar jo de affiliate-funksjonaliteit moatte ymplementearje);
  • js wrapper dy't in abstraksjelaach ymplementearret oer de WAVES NODE REST API;
  • koade op de vuejs ramt, dat is in foarbyld fan it brûken fan de bibleteek en RIDE koade.

Litte wy alle neamde funksjes beskriuwe.

In tûk akkount oproppe yn skuld mei direkte ôflossing

Oproppen fan InvokeScript fereasket betelling fan in fergoeding fan it akkount dat de transaksje begjint. Dit is gjin probleem as jo in projekt dogge foar blockchain-geeks dy't in bepaald oantal WAVES-tokens op har rekken hawwe, mar as it produkt rjochte is op 'e massa's, wurdt dit in serieus probleem. Ommers, de brûker moat bywenje oan de oankeap fan WAVES tokens (of in oar geskikt asset dat kin brûkt wurde om te beteljen foar transaksjes), dy't fergruttet de al oansjenlike drompel foar it ynfieren fan it projekt. Wy kinne aktiva fersprieden oan brûkers dy't tastean te beteljen foar transaksjes en it risiko hawwe fan har misbrûk as automatisearre systemen wurde makke om floeibere aktiva út ús systeem te pompen.

It soe heul handich wêze as it mooglik wêze soe om InvokeScript "op kosten fan 'e ûntfanger" te neamen (it smart account wêrop it skript is ynstalleare), en dizze mooglikheid bestiet, hoewol net op in fanselssprekkende manier.

As, binnen InvokeScript, in ScriptTransfer wurdt makke nei it adres fan de beller, dy't kompensearret foar de tokens dy't bestege oan 'e fergoeding, dan sil sa'n oprop slagje, sels as d'r gjin aktiva op' e opropkonto wiene op it momint fan 'e oprop. Dit is mooglik om't de kontrôle foar genôch tokens wurdt makke neidat de transaksje wurdt neamd, en net foar it, sadat it mooglik is om transaksjes op kredyt te meitsjen, op betingst dat se fuortendaliks ferlost wurde.

ScriptTransfer(i.caller, i.fee, unit)

De koade hjirûnder jout de bestege fergoeding werom mei help fan smart accountfûnsen. Om te beskermjen tsjin misbrûk fan dizze funksje, moatte jo in kontrôle brûke dat de beller de fergoeding yn 'e juste asset besteegje en binnen ridlike grinzen:

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
}

Ek, om te beskermjen tsjin kweade en sinleaze fergriemerij fan fûnsen, is beskerming tsjin automatyske oprop (PoW-captcha) ferplicht.

PoW-captcha

It heule idee fan captcha fan bewiis fan wurk is net nij en is al ymplementearre yn ferskate projekten, ynklusyf dy basearre op WAVES. It punt fan it idee is dat om in aksje út te fieren dy't de boarnen fan ús projekt fergrieme, de beller ek har eigen middels moat besteegje, wat in oanfal foar boarne-útputting frij kostber makket. Foar in heul maklike en lege kosten validaasje dat de stjoerder fan 'e transaksje it PoW-probleem hat oplost, is d'r in transaksje-id-kontrôle:

if take(toBase58String(i.transactionId), 3) != "123" dan throw ("bewiis fan wurk mislearre") oars

Om in transaksje út te fieren, moat de beller sokke parameters kieze sadat syn base58-koade (id) begjint mei de nûmers 123, dy't oerienkomt mei in gemiddelde fan in pear tsientallen sekonden fan prosessortiid en is oer it algemien ridlik foar ús taak. As in ienfâldiger of kompleksere PoW fereaske is, dan kin de taak maklik op in foar de hân lizzende manier wizige wurde.

Query gegevens kaaien troch sjabloan

Om de blockchain as in databank te brûken, is it essensjeel om API-ark te hawwen foar it freegjen fan de databank as in kaai-val mei sjabloanen. Sa'n toolkit ferskynde begjin july 2019 as parameter ?wedstriden op it REST API-fersyk /adressen/data?matches=regexp. No, as wy mear dan ien kaai moatte krije en net alle kaaien tagelyk fan 'e webapplikaasje, mar allinich in groep, dan kinne wy ​​in seleksje meitsje mei de namme fan' e kaai. Bygelyks, yn dit projekt wurde weromlûken transaksjes kodearre as

withdraw_${userAddress}_${txid}

wêrtroch jo in list mei transaksjes kinne krije foar it weromlûken fan fûnsen foar elk opjûn adres mei it sjabloan:

?matches=withdraw_${userAddress}_.*

No litte wy analysearje de komponinten fan 'e klear oplossing.

vuejs koade

De koade is in wurkjende demo, tichtby in echt projekt. It ymplementearret oanmelden fia Waves Keeper en wurkje mei de affiliate.js-bibleteek, mei help wêrfan it in brûker yn it systeem registrearret, transaksjegegevens freget, en lit jo ek fertsjinne fûnsen weromlûke op it akkount fan 'e brûker.

Iepen boarne desintralisearre affiliate programma op 'e Waves blockchain

Koade op RIDE

Bestiet út registrearje, fûns en weromlûke funksjes.

De registerfunksje registrearret in brûker yn it systeem. It hat twa parameters: referer (referr's adres) en de sâltparameter net brûkt yn 'e funksjekoade, dy't nedich is om de transaksje-id te selektearjen (PoW-captcha-taak).

De funksje (lykas de rest fan 'e funksjes yn dit projekt) brûkt de lieningstechnyk, it resultaat fan 'e funksje is it finansierjen fan de betelling fan in fergoeding foar it oproppen fan dizze funksje. Mei tank oan dizze oplossing kin in brûker dy't krekt in slûf hat makke, fuortendaliks wurkje mei it systeem en hoecht net te fernuverjen troch it probleem fan it krijen of ûntfangen fan in asset wêrmei't hy in transaksjefergoeding kin betelje.

It resultaat fan 'e registraasjefunksje is twa records:

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

Dit soarget foar foarút- en efterútsykjen (ferwizer fan de opjûne brûker en alle ferwizings fan de opjûne brûker).

De fûnsfunksje is mear in sjabloan foar in ûntwikkeljen fan echte funksjonaliteit. Yn 'e presinteare foarm nimt it alle fûnsen oerdroegen troch de transaksje en ferspriedt se nei de referrer-akkounts fan' e 1e, 2e, 3e nivo's, nei it "cashback"-akkount en it "feroarje" akkount (alles dat oerbliuwt by distribúsje nei eardere akkounts komt hjir).

Cashback is in middel om de einbrûker te stimulearjen om diel te nimmen oan it ferwizingssysteem. It diel fan 'e kommisje betelle troch it systeem yn' e foarm fan "cashback" kin wurde ynlutsen troch de brûker op deselde wize as beleannings foar ferwizings.

By it brûken fan it ferwizingssysteem moat de fûnsfunksje wizige wurde, ynboud yn 'e haadlogika fan it tûke akkount wêrop it systeem sil wurkje. Bygelyks, as in ferwizing beleanning wurdt betelle foar in weddenskip makke, dan moat de fûns funksje wurde boud yn de logika dêr't de weddenskip wurdt makke (of in oare doel aksje wurdt útfierd dêr't de beleanning wurdt betelle). D'r binne trije nivo's fan ferwizingsbeleanningen kodearre yn dizze funksje. As jo ​​mear of minder nivo's meitsje wolle, dan wurdt dit ek korrizjearre yn 'e koade. It beleanningspersintaazje wurdt ynsteld troch de level1-level3 konstanten, yn 'e koade wurdt it berekkene as bedrach * nivo / 1000, dat is, de wearde 1 komt oerien mei 0,1% (dit kin ek feroare wurde yn de koade).

De funksje-oprop feroaret it saldo fan it akkount en makket ek records foar it loggen fan it formulier:

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

Dat is, de tiid fan 'e transaksje is de tiid fan it blok wêryn it leit. Dit is betrouberer as it brûken fan it tiidstempel fan 'e transaksje sels, foaral om't it net beskikber is fan' e callable.
De weromlûkfunksje lûkt alle opboude beleanningen werom nei it akkount fan 'e brûker. Makket yngongen oan foar loggingsdoelen:

# withdraw log: withdraw_user_txid=amount:timestamp

Applikaasje

It haaddiel fan 'e applikaasje is de affiliate.js bibleteek, dat is in brêge tusken de affiliate gegevens modellen en de WAVES NODE REST API. Implementearret in ramt-ûnôfhinklike abstraksjelaach (elk kin brûkt wurde). Aktive funksjes (registrearje, weromlûke) derfan út dat Waves Keeper is ynstallearre yn it systeem, de bibleteek sels net kontrolearje dit.

Implementearje metoaden:

fetchReferralTransactions
fetchWithdrawTransactions
fetchMyBalance
fetchReferrals
fetchReferer
withdraw
register

De funksjonaliteit fan 'e metoaden is dúdlik út' e nammen, de parameters en weromgegevens wurde beskreaun yn 'e koade. De registerfunksje fereasket ekstra opmerkingen - it begjint de transaksje-id-seleksjesyklus sadat it begjint by 123 - dit is de hjirboppe beskreaune PoW-captcha, dy't beskermet tsjin massaregistraasjes. De funksje fynt in transaksje mei de fereaske id, en tekenet it dan fia Waves Keeper.

DEX affiliate programma beskikber by GitHub.com.

Boarne: www.habr.com

Add a comment