Open Source dezentraliséierte Partnerprogramm op der Waves Blockchain

En dezentraliséierte Partnerprogramm op der Waves Blockchain, implementéiert als Deel vun enger Waves Labs Subventioun vum Bettex Team.

De Post ass keng Reklamm! De Programm ass Open Source, seng Notzung a Verdeelung si gratis. D'Benotzung vum Programm stimuléiert d'Entwécklung vun dApp Uwendungen a fördert allgemeng Dezentraliséierung, wat all Internet Benotzer profitéiert.

Open Source dezentraliséierte Partnerprogramm op der Waves Blockchain

Déi presentéiert dApp fir Affiliate Programmer ass eng Schabloun fir Projeten déi Partner als Deel vun hirer Funktionalitéit enthalen. De Code kann als Schabloun fir Kopie benotzt ginn, als Bibliothéik oder als Set vun Iddien fir technesch Ëmsetzung.

Wat d'Funktionalitéit ugeet, ass dëst e reegelméissege Partnersystem deen d'Registréierung mat engem Referrer implementéiert, Multi-Level Accrual vu Belounungen fir Referratiounen a Motivatioun fir Iech am System ze registréieren (cashback). De System ass eng "reng" dApp, dat heescht, d'Webapplikatioun interagéiert direkt mat der Blockchain, ouni säin eegene Backend, Datebank, etc.

Technike benotzt déi och a villen anere Projeten nëtzlech kënne sinn:

  • Rufft e Smart Kont a Schold mat direkter Remboursement (zu der Zäit vum Uruff ginn et keng Tokens op de Kont fir den Uruff ze bezuelen, awer si schéngen do als Resultat vum Uruff).
  • PoW-captcha - Schutz géint héich-Frequenz automatiséiert Appellen un Smart Kont Funktiounen - analog zu Captcha, awer duerch Beweis vun der Notzung vun Rechenzäit Ressourcen.
  • Ufro fir Datenschlësselen mat enger Schabloun.

D'Applikatioun besteet aus:

  • Smart Account Code an der ride4dapps Sprooch (déi, wéi geplangt, an den Haapt Smart Account fusionéiert ass, fir deen d'Affiliate Funktionalitéit muss ëmgesat ginn);
  • js Wrapper deen en Abstraktiounsniveau iwwer d'WAVES NODE REST API implementéiert;
  • Code am vuejs Kader, wat e Beispill ass fir d'Bibliothéik an de RIDE Code ze benotzen.

Loosst eis all déi opgelëscht Fonctiounen beschreiwen.

Rufft e Smart Kont fir Scholden mat direkter Remboursement

Uruff InvokeScript erfuerdert Bezuelung vun enger Tax vum Kont deen d'Transaktioun initiéiert. Dëst ass kee Problem wann Dir e Projet fir Blockchain Geeks mécht, déi e gewësse Betrag vu WAVES Tokens op hirem Kont hunn, awer wann de Produkt op d'Benotzung vun der Allgemengheet zielt, gëtt dëst e seriöse Problem. No allem muss de Benotzer këmmeren sech ëm WAVES Tokens ze kafen (oder en anert gëeegent Verméigen, dee benotzt ka ginn fir Transaktiounen ze bezuelen), wat déi scho bedeitend Barrière fir d'Entrée an de Projet erhéicht. Mir kënnen e Verméigen u Benotzer verdeelen, déi fäeg sinn fir Transaktiounen ze bezuelen an de Risiko vun hirem Mëssbrauch ze stellen, wann automatiséiert Systemer erstallt ginn fir e flëssege Verméigen aus eisem System ze pumpen.

Et wier ganz bequem wann et méiglech wier InvokeScript "op Käschte vum Empfänger" ze nennen (de Smart Kont op deem de Skript installéiert ass), an esou eng Méiglechkeet existéiert, obwuel net op eng offensichtlech Manéier.

Wann Dir bannent InvokeScript e ScriptTransfer op d'Adress vum Uruff mécht, wat fir d'Käschte Tokens ausginn kompenséiert, da wäert esou en Uruff erfollegräich sinn, och wann et zu der Zäit vum Uruff keng Verméigen um Uruffkonto waren. Dëst ass méiglech, well de Scheck fir genuch Tokens gemaach gëtt nodeems d'Transaktioun opgeruff ass, anstatt virdrun, sou datt Transaktiounen op Kreditt kënne gemaach ginn, ënnerleien dem direkten Remboursement.

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

De Code hei drënner rembourséiert déi verbraucht Frais mat Smart Kont Fongen. Fir géint Mëssbrauch vun dëser Fonktioun ze schützen, ass et néideg e Scheck ze benotzen datt den Uruffer d'Frais am erfuerderlechen Verméigen verbréngt a bannent raisonnabel Grenzen:

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
}

Och, fir géint béiswëlleg a sënnlos Verschwendung vu Fongen ze schützen, ass automatesch Uruffschutz (PoW-captcha) erfuerderlech.

PoW-captcha

Déi ganz Iddi vu Beweis-vun-Aarbecht Captcha ass net nei a gouf scho a verschiddene Projeten ëmgesat, och déi op Basis vu WAVES ëmgesat. D'Iddi ass datt fir eng Handlung auszeféieren déi d'Ressourcen vun eisem Projet verbraucht, den Uruffer muss och seng eege Ressourcen ausginn, wat e Ressourceaustauschattack zimlech deier mécht. Fir eng ganz einfach a bëlleg Validatioun datt de Sender vun der Transaktioun de PoW Problem geléist huet, gëtt et eng Transaktiouns-ID Scheck:

wann take(toBase58String(i.transactionId), 3) != "123" dann werfen ("Beweis vun der Aarbecht gescheitert") anescht

Fir eng Transaktioun auszeféieren, muss den Uruffer esou Parameteren auswielen, sou datt säi Base58 Code (ID) mat den Zuelen 123 ufänkt, wat am Duerchschnëtt e puer Zénger Sekonnen Prozessor Zäit entsprécht an allgemeng raisonnabel ass fir eis Aufgab. Wann e méi einfachen oder méi komplexe PoW erfuerderlech ass, da kann d'Aufgab einfach op eng offensichtlech Manéier geännert ginn.

Ufro fir Datenschlësselen mat enger Schabloun

Fir Blockchain als Datebank ze benotzen, ass et vital API Tools ze hunn fir d'Datebank als Schlëssel-Val ze froen baséiert op Templates. Sou en Toolkit erschéngt Ufank Juli 2019 a Form vun engem Parameter ? Mätscher op der REST API Ufro /adressen/data?matches=regexp. Elo, wa mir méi wéi ee Schlëssel vun enger Webapplikatioun musse kréien an net all Schlësselen gläichzäiteg, awer nëmmen eng Grupp, da kënne mir eng Selektioun mam Schlësselnumm maachen. Zum Beispill, an dësem Projet sinn Austrëtt Transaktiounen encoded als

withdraw_${userAddress}_${txid}

wat Iech erlaabt eng Lëscht vun Transaktiounen fir Fongen zréckzéien fir all gegebene Adress mat der Schabloun ze kréien:

?matches=withdraw_${userAddress}_.*

Loosst eis elo d'Komponente vun der fäerdeger Léisung kucken.

Vuejs Code

De Code ass eng funktionéierend Demo no beim realen Projet. Et implementéiert Login duerch Waves Keeper a schafft mat der affiliate.js Bibliothéik, mat där et de Benotzer am System registréiert, Transaktiounsdaten ufroen, an och erlaabt Iech verdéngte Fongen op de Benotzerkont zréckzéien.

Open Source dezentraliséierte Partnerprogramm op der Waves Blockchain

Code fir RIDE

Besteet aus dem Register, Fonds an Réckzuch Funktiounen.

D'Registrierungsfunktioun registréiert e Benotzer um System. Et huet zwee Parameteren: Referer (Referrer Adress) an de Salzparameter, deen net am Funktiounscode benotzt gëtt, deen néideg ass fir d'Transaktiouns-ID (PoW-captcha Task) ze wielen.

D'Funktioun (wéi aner Funktiounen aus dësem Projet) benotzt d'Scholdenruff Technik, d'Resultat vun der Funktioun ass d'Bezuelung vun enger Frais fir dës Funktioun ze finanzéieren. Dank dëser Léisung kann e Benotzer, dee just e Portemonnaie erstallt huet, direkt mat dem System schaffen a muss keng Suergen iwwer de Kaf oder Erhalen vun engem Verméigen, deen him erlaabt eng Transaktiounsgebühr ze bezuelen.

D'Resultat vun der Aschreiwungsfunktioun ass zwee Rekorder:

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

Dëst erlaabt Forward an Reverse Sichen (de Referrer vun engem bestëmmte Benotzer an all Referratioune vun engem bestëmmte Benotzer).

D'Fongfunktioun ass méi eng Schabloun fir richteg Funktionalitéit z'entwéckelen. A senger präsentéierter Form hëlt et all d'Fongen, déi vun der Transaktioun transferéiert ginn, a verdeelt se op d'Konten vun de Referrer vun den Niveauen 1, 2, 3, op de Kont "Cashback" an de "Change" Kont (alles wat bleift wann se op de fréiere verdeelt ginn) Konten geet hei).

Cashback ass e Mëttel fir den Endbenutzer ze motivéieren fir un de Referralsystem deelzehuelen. De Benotzer kann den Deel vun der Kommissioun, déi vum System bezuelt gëtt a Form vun "Cashback" zréckzéien, an der selwechter Manéier wéi Belounungen fir Referratiounen.

Wann Dir e Referralsystem benotzt, sollt d'Fondsfunktioun geännert an an d'Haaptlogik vum Smart Kont integréiert ginn, op deem de System funktionnéiert. Zum Beispill, wann e Referralbelounung fir eng Wette bezuelt gëtt, da sollt d'Fondsfunktioun an d'Logik gebaut ginn, wou d'Wette gesat gëtt (oder eng aner geziilt Aktioun gëtt ausgefouert fir déi d'Belounung bezuelt gëtt). Dräi Niveaue vu Referralbelounungen ginn an dës Funktioun kodéiert. Wann Dir méi oder manner Niveauen maache musst, da gëtt dëst och am Code korrigéiert. De Belounungsprozent gëtt vun den Niveau1-Level3 Konstanten am Code festgeluecht wéi et berechent gëtt Betrag * Niveau / 1000, dat ass, de Wäert 1 entsprécht 0,1% (dëst kann och am Code geännert ginn).

D'Funktioun ruffen ännert d'Kontobalance an erstellt och Entréen fir Logzwecker vun der Form:

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

Dat ass, d'Transaktiounszäit ass d'Zäit vum Block an deem se läit. Dëst ass méi zouverlässeg wéi den Zäitstempel vun der Transaktioun selwer ze benotzen, besonnesch well et net vum Callable verfügbar ass.
D'Entzéiungsfunktioun weist all akkumuléiert Belounungen op de Benotzerkont. Erstellt Entréen fir Logzwecker:

# withdraw log: withdraw_user_txid=amount:timestamp

Applikatioun

Den Haaptdeel vun der Applikatioun ass d'affiliate.js Bibliothéik, déi eng Bréck ass tëscht de Partnerdatenmodeller an der WAVES NODE REST API. Implementéiert en Abstraktiounsniveau onofhängeg vum Kader (jidderee ka benotzt ginn). Aktiv Funktiounen (registréieren, zréckzéien) huelen un datt Waves Keeper op de System installéiert ass, kontrolléiert d'Bibliothéik selwer net.

Ëmsetzung Methoden:

fetchReferralTransactions
fetchWithdrawTransactions
fetchMyBalance
fetchReferrals
fetchReferer
withdraw
register

D'Funktionalitéit vun de Methoden ass offensichtlech aus den Nimm an d'Retour Daten sinn am Code beschriwwen. D'Registrierungsfunktioun erfuerdert zousätzlech Kommentarer - et fänkt e Zyklus un fir d'Transaktiouns-ID auswielen, sou datt et bei 123 ufänkt - dëst ass de PoW-captcha uewen beschriwwen, dee géint Massenregistréierunge schützt. D'Funktioun fënnt eng Transaktioun mat der erfuerderter ID, an ënnerschreift se dann duerch Waves Keeper.

DEX Partnerprogramm ass verfügbar op GitHub.com.

Source: will.com

Setzt e Commentaire