Desentralisasi, program afiliasi open source dina blockchain Waves

Program afiliasi desentralisasi dina blockchain Waves, dilaksanakeun salaku bagian tina hibah Waves Labs ku tim Bettex.

Posna sanés iklan! Program éta open source, panggunaan sareng distribusina gratis. Pamakéan program ngarangsang pamekaran aplikasi dApp sareng umumna ngamajukeun desentralisasi, anu nguntungkeun unggal pangguna Internét.

Desentralisasi, program afiliasi open source dina blockchain Waves

DApp anu dibere pikeun program afiliasi mangrupikeun citakan pikeun proyék-proyék anu kalebet afiliasi salaku bagian tina fungsionalitasna. Kodeu tiasa dianggo salaku citakan pikeun nyalin, salaku perpustakaan, atanapi sakumpulan ideu pikeun palaksanaan téknis.

Dina hal fungsionalitas, ieu sistem affiliate biasa nu implements pendaptaran kalawan referrer a, multi-tingkat accrual ganjaran pikeun referrals jeung motivasi pikeun ngadaptar dina sistem (cashback). Sistemna mangrupikeun dApp "murni", nyaéta, aplikasi wéb berinteraksi langsung sareng blockchain, tanpa gaduh backend, database, jsb.

Téhnik anu dianggo ogé tiasa mangpaat dina seueur proyék sanés:

  • Nelepon hiji akun pinter kana hutang jeung repayment saharita (dina waktu nelepon euweuh tokens on akun pikeun bayar keur nelepon, tapi maranéhna muncul aya salaku hasil tina panggero).
  • PoW-captcha - panyalindungan ngalawan télépon otomatis frékuénsi luhur pikeun fungsi akun pinter - analog jeung captcha, tapi ngaliwatan bukti pamakéan sumberdaya komputasi.
  • Patarosan pikeun konci data ngagunakeun citakan.

Aplikasina diwangun ku:

  • kode akun pinter dina basa ride4dapps (anu, sakumaha rencanana, dihijikeun kana akun pinter utama nu fungsionalitas affiliate perlu dilaksanakeun);
  • js wrapper nu implements hiji tingkat abstraksi ngaliwatan WAVES NODE REST API;
  • kode dina kerangka vuejs, nu conto ngagunakeun perpustakaan jeung kode numpak.

Hayu urang ngajelaskeun sagala fitur didaptarkeun.

Nelepon akun pinter pikeun hutang sareng pamayaran langsung

Nelepon InvokeScript merlukeun mayar fee ti akun initiating urus. Ieu teu jadi masalah lamun nyieun proyék pikeun geeks blockchain anu boga jumlah nu tangtu tokens WAVES on akun maranéhanana, tapi lamun produk ieu aimed di pamakéan ku masarakat umum, ieu janten masalah serius. Barina ogé, pamaké kudu ngurus purchasing WAVES tokens (atawa asset sejen cocog nu bisa dipaké pikeun mayar transaksi), nu ngaronjatkeun panghalang geus considerable pikeun asupna kana proyék. Urang tiasa ngadistribusikaeun aset ka pangguna anu tiasa mayar transaksi sareng nyanghareupan résiko nyalahgunakeun nalika sistem otomatis diciptakeun pikeun ngompa aset cair tina sistem kami.

Eta bakal pohara merenah lamun éta bisa nelepon InvokeScript "di expense tina panarima" (akun pinter nu naskah dipasang), sarta kamungkinan kitu, sanajan teu jelas, aya.

Upami di jero InvokeScript anjeun ngadamel ScriptTransfer ka alamat panelepon, anu ngimbangan token biaya anu dibébaskeun, maka sauran sapertos kitu bakal suksés, sanaos nalika nelepon henteu aya aset dina akun telepon. Ieu mungkin sabab cek pikeun tokens cukup dijieun sanggeus urus disebut, tinimbang saméméh éta, ku kituna transaksi bisa dilakukeun dina kiridit, tunduk kana repayment saharita.

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

Kodeu handap reimburses fee spent ngagunakeun dana akun pinter. Pikeun nangtayungan tina nyalahgunakeun fitur ieu, perlu ngagunakeun cék yén panelepon méakkeun fee dina asset diperlukeun tur dina wates lumrah:

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
}

Ogé, pikeun ngajagaan tina runtah dana anu jahat sareng teu aya akal, panyalindungan telepon otomatis (PoW-captcha) diperyogikeun.

PoW-captcha

Gagasan captcha proof-of-work sanés énggal sareng parantos dilaksanakeun dina sababaraha proyék, kalebet anu dilaksanakeun dina dasar GELOMBANG. Gagasanna nyaéta pikeun ngalaksanakeun tindakan anu ngabutuhkeun sumber daya proyék urang, panelepon ogé kedah nyéépkeun sumber daya sorangan, anu nyababkeun serangan deplesi sumberdaya rada mahal. Pikeun validasi anu gampang pisan sareng murah yén pangirim transaksi parantos ngarengsekeun masalah PoW, aya cek id transaksi:

lamun nyandak (toBase58String (i.transactionId), 3)! = "123" lajeng buang ("bukti karya gagal") sejenna

Pikeun ngalaksanakeun transaksi, panelepon kedah milih parameter sapertos kitu supados kode base58 na (id) dimimitian ku angka 123, anu rata-rata rata-rata sababaraha puluhan detik waktos prosésor sareng umumna lumrah pikeun tugas urang. Upami PoW anu langkung saderhana atanapi langkung kompleks diperyogikeun, maka tugasna tiasa gampang dirobih ku cara anu jelas.

Patarosan pikeun konci data ngagunakeun citakan

Dina raraga ngagunakeun blockchain salaku database a, éta penting pikeun mibanda parabot API pikeun querying database salaku key-val dumasar kana citakan. Alat sapertos ieu muncul dina awal Juli 2019 dina bentuk parameter ?cocog dina pamundut REST API /alamat/data?cocog = regexp. Ayeuna, upami urang kedah kéngingkeun langkung ti hiji konci tina aplikasi wéb sareng henteu sadayana konci sakaligus, tapi ngan ukur sababaraha grup, maka urang tiasa milih ku nami konci. Contona, dina proyék ieu, transaksi ditarikna disandikeun salaku

withdraw_${userAddress}_${txid}

anu ngamungkinkeun anjeun kéngingkeun daptar transaksi pikeun ditarikna dana pikeun alamat anu dipasihkeun nganggo citakan:

?matches=withdraw_${userAddress}_.*

Ayeuna hayu urang nempo komponén tina solusi rengse.

Kodeu Vuejs

Kodeu mangrupa demo gawe deukeut jeung proyék nyata. Implements login ngaliwatan Waves Keeper sarta gawéna kalayan affiliate.js perpustakaan, kalawan nu registers pamaké dina sistem, queries data transaksi, sarta ogé ngidinan Anjeun pikeun mundur dana earned kana rekening pamaké.

Desentralisasi, program afiliasi open source dina blockchain Waves

Kodeu pikeun RIDE

Diwangun ku register, dana jeung fungsi mundur.

Fungsi register ngadaptar pamaké dina sistem. Cai mibanda dua parameter: referer (alamat referrer) jeung parameter uyah, nu teu dipaké dina kode fungsi, nu diperlukeun pikeun milih id urus (tugas PoW-captcha).

fungsi nu (sakumaha fungsi séjén tina proyék ieu) ngagunakeun téknik panggero hutang, hasilna fungsi pikeun ngabiayaan pembayaran fee pikeun nelepon fungsi ieu. Hatur nuhun kana solusi ieu, pangguna anu nembé nyiptakeun dompét tiasa langsung damel sareng sistem sareng henteu kedah hariwang ngeunaan mésér atanapi nampi aset anu ngamungkinkeun anjeunna mayar biaya transaksi.

Hasil tina fungsi pendaptaran nyaéta dua rékaman:

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

Hal ieu ngamungkinkeun pilarian maju jeung ngabalikeun (nu referrer hiji pamaké dibikeun tur sagala referrals tina pamaké dibikeun).

Fungsi dana leuwih ti template pikeun ngembangkeun fungsionalitas nyata. Dina bentuk anu disayogikeun, éta nyandak sadaya dana anu ditransfer ku transaksi sareng ngadistribusikaeun kana rekening referrer tingkat 1, 2, 3, kana akun "cashback" sareng akun "robah" (sagala anu tetep nalika disebarkeun ka saméméhna. rekening di dieu).

Cashback mangrupikeun cara pikeun ngamotivasi pangguna akhir pikeun ilubiung dina sistem rujukan. Pamaké tiasa mundur bagian tina komisi anu dibayar ku sistem dina bentuk "cashback" dina cara anu sami sareng ganjaran pikeun rujukan.

Nalika nganggo sistem rujukan, fungsi dana kedah dirobih sareng diintegrasikeun kana logika utama akun pinter dimana sistem bakal jalan. Contona, upami ganjaran rujukan dibayar pikeun alungan dijieun, lajeng fungsi dana kudu diwangun kana logika dimana bets disimpen (atawa aksi sasaran sejen dipigawé pikeun nu ganjaran dibayar). Tilu tingkatan ganjaran rujukan disandi kana fungsi ieu. Upami anjeun kedah ngadamel langkung atanapi langkung tingkat, maka ieu ogé dilereskeun dina kode. Persentase ganjaran diatur ku konstanta level1-level3 dina kode nu diitung salaku jumlah * tingkat / 1000, nyaeta, nilai 1 pakait jeung 0,1% (ieu ogé bisa dirobah dina kode).

Nyauran fungsina ngarobih kasaimbangan akun sareng ogé nyiptakeun éntri pikeun tujuan logging formulir:

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

Nyaéta, waktos transaksi nyaéta waktos blok dimana éta ayana. Ieu leuwih dipercaya ti ngagunakeun timestamp ti urus sorangan, utamana saprak éta teu sadia ti callable nu.
Fungsi mundur mintonkeun sadaya akumulasi ganjaran kana akun pamaké. Nyiptakeun éntri pikeun tujuan logging:

# withdraw log: withdraw_user_txid=amount:timestamp

aplikasi

Bagian utama aplikasi nyaéta perpustakaan affiliate.js, nu mangrupakeun sasak antara model data affiliate jeung WAVES NODE REST API. Ngalaksanakeun tingkat abstraksi anu bebas tina kerangka (sakur anu tiasa dianggo). fungsi aktip (ngadaptar, mundur) nganggap yén Waves Keeper dipasang dina sistem perpustakaan sorangan henteu pariksa ieu.

Ngalaksanakeun métode:

fetchReferralTransactions
fetchWithdrawTransactions
fetchMyBalance
fetchReferrals
fetchReferer
withdraw
register

Fungsi tina métode atra tina ngaran parameter jeung data balik dijelaskeun dina kode. Fungsi register merlukeun komentar tambahan - dimimitian hiji siklus milih id urus supados dimimitian dina jam 123 - ieu PoW-captcha ditétélakeun di luhur, nu ngajaga ngalawan registrations massa. Fungsina mendakan transaksi sareng id anu diperyogikeun, teras ditandatanganan ngalangkungan Waves Keeper.

Program afiliasi DEX sayogi di GitHub.com.

sumber: www.habr.com

Tambahkeun komentar