Desentralisasi, program afiliasi sumber terbuka ing pamblokiran Waves

Program afiliasi desentralisasi ing pamblokiran Waves, dileksanakake minangka bagéan saka hibah Waves Labs dening tim Bettex.

Posting ora iklan! Program kasebut mbukak sumber, panggunaan lan distribusi gratis. Panggunaan program kasebut ngrangsang pangembangan aplikasi dApp lan umume ningkatake desentralisasi, sing entuk manfaat kanggo saben pangguna Internet.

Desentralisasi, program afiliasi sumber terbuka ing pamblokiran Waves

DApp sing disedhiyakake kanggo program afiliasi minangka cithakan kanggo proyek sing kalebu afiliasi minangka bagean saka fungsine. Kode kasebut bisa digunakake minangka cithakan kanggo nyalin, minangka perpustakaan, utawa minangka set gagasan kanggo implementasi teknis.

Ing babagan fungsionalitas, iki minangka sistem afiliasi biasa sing ngleksanakake registrasi kanthi referrer, accrual multi-level ganjaran kanggo referral lan motivasi kanggo ndhaptar ing sistem (cashback). Sistem kasebut minangka dApp "murni", yaiku, aplikasi web sesambungan langsung karo pamblokiran, tanpa duwe backend, database, lsp.

Teknik sing digunakake uga bisa migunani ing pirang-pirang proyek liyane:

  • Nelpon akun pinter menyang utang karo mbayar maneh langsung (ing wektu telpon ora ana token ing akun kanggo mbayar kanggo telpon, nanging padha katon ana minangka asil saka telpon).
  • PoW-captcha - pangayoman marang telpon otomatis frekuensi dhuwur kanggo fungsi akun pinter - analog kanggo captcha, nanging liwat bukti nggunakake sumber daya komputerisasi.
  • Pitakon kanggo kunci data nggunakake cithakan.

Aplikasi kasebut kalebu:

  • kode akun pinter ing basa ride4dapps (sing, kaya sing direncanakake, digabungake menyang akun pinter utama sing fungsionalitas afiliasi kudu dileksanakake);
  • js wrapper sing ngleksanakake tingkat abstraksi liwat WAVES NODE REST API;
  • kode ing framework vuejs, kang conto nggunakake perpustakaan lan kode RIDE.

Ayo kita njlèntrèhaké kabeh fitur sing kadhaptar.

Nelpon akun pinter kanggo utang karo mbayar maneh langsung

Nelpon InvokeScript mbutuhake mbayar ragad saka akun sing miwiti transaksi. Iki ora dadi masalah yen sampeyan nggawe proyek kanggo geeks blockchain sing duwe jumlah token WAVES tartamtu ing akun, nanging yen produk kasebut dituju kanggo digunakake dening masyarakat umum, iki dadi masalah serius. Sawise kabeh, pangguna kudu ngurus tuku token WAVES (utawa aset liyane sing cocog sing bisa digunakake kanggo mbayar transaksi), sing nambah alangan sing wis cukup kanggo mlebu ing proyek kasebut. Kita bisa nyebarake aset menyang pangguna sing bakal bisa mbayar transaksi lan ngadhepi risiko penyalahgunaan nalika sistem otomatis digawe kanggo ngompa aset cair saka sistem kita.

Iku bakal trep banget yen bisa nelpon InvokeScript "kanthi biaya panampa" (akun pinter kang script diinstal), lan kamungkinan kuwi, sanajan ora ing cara ketok, ana.

Yen ing InvokeScript sampeyan nggawe ScriptTransfer menyang alamat panelpon, sing menehi kompensasi kanggo token ragad sing ditindakake, mula telpon kasebut bakal sukses, sanajan nalika nelpon ora ana aset ing akun telpon. Iki bisa amarga mriksa kanggo token cekap digawe sawise transaksi disebut, tinimbang sadurunge, supaya transaksi bisa digawe ing kredit, tundhuk mbayar maneh langsung.

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

Kode ing ngisor iki mbalekake ragad sing digunakake nggunakake dana akun cerdas. Kanggo nglindhungi saka nyalahi panggunaan fitur iki, sampeyan kudu mriksa manawa panelpon mbuwang ragad ing aset sing dibutuhake lan ing watesan sing cukup:

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
}

Uga, kanggo nglindhungi saka sampah dana sing ala lan ora ana gunane, proteksi panggilan otomatis (PoW-captcha) dibutuhake.

PoW-captcha

Ide banget saka captcha bukti-kerja ora anyar lan wis dileksanakake ing macem-macem proyek, kalebu sing dileksanakake adhedhasar WAVES. Ide iki yaiku supaya bisa nindakake tindakan sing nggunakake sumber daya proyek kita, panelpon uga kudu mbuwang sumber daya dhewe, sing ndadekake serangan penipisan sumber daya cukup larang. Kanggo validasi sing gampang banget lan murah yen pangirim transaksi wis ngrampungake masalah PoW, ana mriksa id transaksi:

yen njupuk(toBase58String(i.transactionId), 3) != "123" banjur uncalan ("bukti karya gagal") liya

Kanggo nindakake transaksi, panelpon kudu milih paramèter kasebut supaya kode base58 (id) diwiwiti kanthi nomer 123, sing rata-rata cocog karo sawetara puluhan detik wektu prosesor lan umume cukup kanggo tugas kita. Yen PoW sing luwih prasaja utawa luwih rumit dibutuhake, mula tugas kasebut bisa gampang diowahi kanthi cara sing jelas.

Pitakon kanggo kunci data nggunakake cithakan

Kanggo nggunakake pamblokiran minangka basis data, penting kanggo duwe alat API kanggo nggoleki basis data minangka key-val adhedhasar cithakan. Toolkit kasebut muncul ing awal Juli 2019 ing wangun parameter ?cocog ing panjalukan REST API /alamat/data?cocok=regexp. Saiki, yen kita kudu entuk luwih saka siji tombol saka aplikasi web lan ora kabeh tombol bebarengan, nanging mung sawetara klompok, banjur kita bisa milih kanthi jeneng kunci. Contone, ing proyek iki, transaksi penarikan dienkode minangka

withdraw_${userAddress}_${txid}

sing ngidini sampeyan entuk dhaptar transaksi kanggo penarikan dana kanggo alamat apa wae kanthi nggunakake cithakan:

?matches=withdraw_${userAddress}_.*

Saiki ayo goleki komponen solusi sing wis rampung.

Kode Vuejs

Kode kasebut minangka demo kerja sing cedhak karo proyek nyata. Iku ngleksanakake login liwat Waves Keeper lan dianggo karo affiliate.js perpustakaan, karo kang ndhaptar pangguna ing sistem, takon data transaksi, lan uga ngijini sampeyan kanggo mbatalake dana entuk kanggo akun pangguna.

Desentralisasi, program afiliasi sumber terbuka ing pamblokiran Waves

Kode kanggo RIDE

Kasedhiya saka register, dana lan mbatalake fungsi.

Fungsi register ndhaptar pangguna ing sistem. Wis loro paramèter: referer (alamat referrer) lan parameter uyah, kang ora digunakake ing kode fungsi, kang perlu kanggo milih id transaksi (tugas PoW-captcha).

Fungsi kasebut (kaya fungsi liyane saka proyek iki) nggunakake teknik telpon utang, asil saka fungsi kasebut yaiku mbiayai pambayaran ragad kanggo nelpon fungsi kasebut. Thanks kanggo solusi iki, pangguna sing nembe nggawe dompet bisa langsung nggarap sistem kasebut lan ora kudu kuwatir babagan tuku utawa nampa aset sing ngidini dheweke mbayar ragad transaksi.

Asil saka fungsi registrasi ana rong cathetan:

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

Iki ngidini panelusuran maju lan mbalikke (referrer saka pangguna tartamtu lan kabeh referral saka pangguna tartamtu).

Fungsi dana luwih saka cithakan kanggo ngembangaken fungsi nyata. Ing wangun sing ditampilake, njupuk kabeh dana sing ditransfer dening transaksi lan disebarake menyang akun referrer tingkat 1, 2, 3, menyang akun "cashback" lan akun "ganti" (kabeh sing isih ana nalika disebarake menyang sadurunge. akun menyang kene).

Cashback minangka sarana kanggo motivasi pangguna pungkasan kanggo melu ing sistem rujukan. Pangguna bisa mbatalake bagean komisi sing dibayar dening sistem ing wangun "cashback" kanthi cara sing padha karo ganjaran kanggo referral.

Nalika nggunakake sistem rujukan, fungsi dana kudu diowahi lan digabungake menyang logika utama akun cerdas sing bakal digunakake sistem kasebut. Contone, yen ganjaran ngubungake wis mbayar kanggo nang digawe, banjur fungsi dana kudu dibangun menyang logika ngendi nang diselehake (utawa tumindak diangkah liyane dileksanakake kanggo kang ganjaran wis mbayar). Telung tingkat ganjaran rujukan dikode ing fungsi iki. Yen sampeyan kudu nggawe tingkat luwih utawa kurang, banjur iki uga didandani ing kode. Persentase ganjaran disetel dening konstanta level1-level3 ing kode sing diwilang minangka jumlah * tingkat / 1000, yaiku, nilai 1 cocog karo 0,1% (iki uga bisa diganti ing kode).

Nelpon fungsi ngganti imbangan akun lan uga nggawe entri kanggo tujuan logging formulir:

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

Tegese, wektu transaksi yaiku wektu blok sing ana. Iki luwih dipercaya tinimbang nggunakake cap wektu saka transaksi kasebut, utamane amarga ora kasedhiya saka sing bisa ditelpon.
Fungsi mbatalake nampilake kabeh ganjaran akumulasi menyang akun pangguna. Nggawe entri kanggo tujuan logging:

# withdraw log: withdraw_user_txid=amount:timestamp

Aplikasi

Bagian utama aplikasi kasebut yaiku perpustakaan affiliate.js, sing dadi jembatan antarane model data afiliasi lan API WAVES NODE REST. Ngleksanakake tingkat abstraksi independen saka framework (sing bisa digunakake). Fungsi aktif (ndhaftar, mbatalake) nganggep Waves Keeper wis diinstal ing sistem perpustakaan dhewe ora mriksa iki.

Implementasi metode:

fetchReferralTransactions
fetchWithdrawTransactions
fetchMyBalance
fetchReferrals
fetchReferer
withdraw
register

Fungsionalitas metode kasebut jelas saka jeneng paramèter lan data sing bali diterangake ing kode kasebut. Fungsi ndhaftar mbutuhake komentar tambahan - iku miwiti siklus milih id transaksi supaya miwiti ing 123 - iki PoW-captcha sing diterangake ing ndhuwur, kang nglindhungi saka registrasi massal. Fungsi nemokake transaksi karo id sing dibutuhake, lan banjur mlebu liwat Waves Keeper.

program afiliasi DEX kasedhiya ing GitHub.com.

Source: www.habr.com

Add a comment