Mpango wazi wa ushirika uliowekwa madarakani kwenye blockchain ya Waves

Mpango wa ushirika uliogatuliwa kwa msingi wa blockchain ya Waves, unaotekelezwa kama sehemu ya ruzuku ya Waves Labs na timu ya Bettex.

Chapisho halijafadhiliwa! Mpango huo ni chanzo wazi, matumizi na usambazaji wake ni bure. Matumizi ya programu huchochea uundaji wa programu za dApp na, kwa ujumla, kukuza ugatuaji, ambayo ni ya manufaa kwa kila mtumiaji wa Mtandao.

Mpango wazi wa ushirika uliowekwa madarakani kwenye blockchain ya Waves

DApp iliyowasilishwa kwa programu za washirika ni kiolezo cha miradi inayojumuisha washirika kama sehemu ya utendaji wao. Msimbo unaweza kutumika kama kiolezo cha kunakili, kama maktaba, au kama seti ya mawazo ya utekelezaji wa kiufundi.

Kwa upande wa utendakazi, huu ni mfumo shirikishi wa kawaida ambao unatekeleza usajili na mtumaji, nyongeza ya ngazi mbalimbali ya malipo kwa ajili ya rufaa na motisha ya kujiandikisha katika mfumo (cashback). Mfumo ni dApp "safi", yaani, programu ya wavuti inaingiliana moja kwa moja na blockchain bila backend yake mwenyewe, database, nk.

Mbinu hutumiwa ambazo zinaweza pia kuwa muhimu katika miradi mingine mingi:

  • Kupiga simu kwa akaunti ya smart kwa mkopo na ulipaji wa haraka (wakati wa simu, hakuna ishara kwenye akaunti ya kulipia simu, lakini zinaonekana pale kama matokeo ya simu).
  • PoW-captcha - ulinzi dhidi ya wito wa kiotomatiki wa juu-frequency wa kazi za akaunti smart - sawa na captcha, lakini kupitia uthibitisho wa matumizi ya rasilimali za kompyuta.
  • Omba kwa funguo za data kwa kiolezo.

Maombi yana:

  • msimbo wa akaunti smart katika lugha ya ride4dapps (ambayo, kama ilivyopangwa, imeunganishwa kwenye akaunti kuu ya smart, ambayo unahitaji kutekeleza utendaji wa washirika);
  • js wrapper inayotekelezea safu ya uondoaji juu ya WAVES NODE REST API;
  • msimbo kwenye mfumo wa vuejs, ambao ni mfano wa kutumia maktaba na msimbo wa RIDE.

Hebu tueleze vipengele vyote vilivyoorodheshwa.

Kuita akaunti smart kuwa deni na ulipaji wa haraka

Kupiga simu InvokeScript kunahitaji malipo ya ada kutoka kwa akaunti iliyoanzisha muamala. Hili sio tatizo ikiwa unafanya mradi wa geeks za blockchain ambao wana kiasi fulani cha ishara za WAVES kwenye akaunti yao, lakini ikiwa bidhaa inalenga kwa raia, hii inakuwa tatizo kubwa. Baada ya yote, mtumiaji lazima ahudhurie ununuzi wa ishara za WAVES (au mali nyingine inayofaa ambayo inaweza kutumika kulipia shughuli), ambayo huongeza kizingiti kikubwa cha kuingia kwenye mradi. Tunaweza kusambaza mali kwa watumiaji ambao wataruhusiwa kulipia miamala na kukabili hatari ya kuzitumia vibaya mifumo ya otomatiki inapoundwa ili kusukuma mali kioevu kutoka kwa mfumo wetu.

Itakuwa rahisi sana ikiwa itawezekana kuita InvokeScript "kwa gharama ya mpokeaji" (akaunti mahiri ambayo hati imesakinishwa), na uwezekano huu upo, ingawa si kwa njia dhahiri.

Ikiwa, ndani ya InvokeScript, ScriptTransfer itafanywa kwa anwani ya mpigaji simu, ambayo hufidia tokeni zilizotumiwa kwenye ada, basi simu kama hiyo itafaulu, hata kama hakukuwa na vipengee kwenye akaunti ya kupiga simu wakati wa kupiga simu. Hii inawezekana kwa sababu hundi ya ishara ya kutosha inafanywa baada ya shughuli inayoitwa, na si kabla yake, ili iwezekanavyo kufanya shughuli kwa mkopo, ikiwa ni pamoja na kwamba wakombolewa mara moja.

Uhamisho wa Hati (mpigia simu, ada, kitengo)

Nambari iliyo hapa chini inarejesha ada iliyotumika kwa kutumia fedha za akaunti mahiri. Ili kulinda dhidi ya matumizi mabaya ya kipengele hiki, lazima utumie hundi kwamba mpiga simu anatumia ada katika kipengee sahihi na ndani ya mipaka inayofaa:

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
}

Pia, ili kulinda dhidi ya upotevu mbaya na usio na maana wa fedha, ulinzi dhidi ya simu ya moja kwa moja (PoW-captcha) inahitajika.

PoW-captcha

Wazo lenyewe la captcha ya uthibitisho wa kazi sio mpya na tayari imetekelezwa katika miradi mbali mbali, pamoja na ile inayotokana na WAVES. Hoja ya wazo ni kwamba ili kufanya kitendo ambacho kinapoteza rasilimali za mradi wetu, mpigaji simu lazima pia atumie rasilimali yake mwenyewe, ambayo hufanya uharibifu wa rasilimali kushambulia kwa gharama kubwa. Kwa uthibitisho rahisi sana na wa gharama ya chini kwamba mtumaji wa muamala ametatua tatizo la PoW, kuna ukaguzi wa kitambulisho cha muamala:

ikiwa take(toBase58String(i.transactionId), 3) != β€œ123” basi tupa(β€œuthibitisho wa kazi umeshindwa”) vinginevyo

Ili kufanya shughuli, mpigaji simu lazima achague vigezo hivyo ili nambari yake ya msingi58 (id) ianze na nambari 123, ambayo inalingana na wastani wa makumi ya sekunde za wakati wa processor na kwa ujumla ni sawa kwa kazi yetu. Ikiwa PoW rahisi au ngumu zaidi inahitajika, basi kazi inaweza kubadilishwa kwa urahisi kwa njia ya wazi.

Vifunguo vya data vya hoja kwa kiolezo

Ili kutumia blockchain kama hifadhidata, ni muhimu kuwa na zana za API za kuuliza hifadhidata kama kigezo cha ufunguo kwa kutumia violezo. Kifaa kama hicho kilionekana mapema Julai 2019 kama kigezo ?mechi kwa ombi la REST API /addresses/data?matches=regexp. Sasa, ikiwa tunahitaji kupata funguo zaidi ya moja na sio funguo zote mara moja kutoka kwa programu ya wavuti, lakini kikundi fulani tu, basi tunaweza kufanya uteuzi kwa jina la ufunguo. Kwa mfano, katika mradi huu, shughuli za uondoaji zimesimbwa kama

withdraw_${userAddress}_${txid}

ambayo hukuruhusu kupata orodha ya miamala ya uondoaji wa pesa kwa anwani yoyote uliyopewa kwa kutumia kiolezo:

?matches=withdraw_${userAddress}_.*

Sasa hebu tuchambue vipengele vya suluhisho la kumaliza.

nambari ya vuejs

Msimbo ni onyesho la kufanya kazi, karibu na mradi halisi. Inatumia kuingia kupitia Waves Keeper na kufanya kazi na maktaba ya affiliate.js, kwa usaidizi wa ambayo inasajili mtumiaji katika mfumo, inauliza data ya shughuli, na pia inakuwezesha kuondoa fedha zilizopatikana kwa akaunti ya mtumiaji.

Mpango wazi wa ushirika uliowekwa madarakani kwenye blockchain ya Waves

Msimbo kwenye RIDE

Inajumuisha kusajili, kufadhili na kuondoa kazi.

Kitendaji cha rejista husajili mtumiaji kwenye mfumo. Ina vigezo viwili: kielekezi (anwani ya kielekezi) na kigezo cha chumvi kisichotumika katika msimbo wa kazi, ambayo inahitajika ili kuchagua kitambulisho cha shughuli (kazi ya PoW-captcha).

Chaguo za kukokotoa (kama vile vipengele vingine katika mradi huu) hutumia mbinu ya kukopa, matokeo ya chaguo hili ni kufadhili malipo ya ada ya kupiga chaguo hili. Shukrani kwa suluhisho hili, mtumiaji ambaye ameunda tu mkoba anaweza kufanya kazi mara moja na mfumo na hawana haja ya kushangaa na suala la kupata au kupokea mali ambayo inamruhusu kulipa ada ya manunuzi.

Matokeo ya kazi ya usajili ni rekodi mbili:

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

Hii inaruhusu uchunguzi wa mbele na nyuma (mrejeleaji wa mtumiaji huyu na marejeleo yote ya mtumiaji huyu).

Shughuli ya mfuko ni zaidi ya kiolezo cha kuendeleza utendakazi halisi. Katika fomu iliyowasilishwa, inachukua fedha zote zilizohamishwa na shughuli na kuzisambaza kwa akaunti za rejea za ngazi ya 1, ya 2, ya 3, kwenye akaunti ya "cashback" na akaunti ya "mabadiliko" (kila kitu kinachobaki wakati wa usambazaji kwa akaunti za awali kinafika hapa).

Kurejesha pesa ni njia ya kumtia motisha mtumiaji wa mwisho kushiriki katika mfumo wa rufaa. Sehemu ya tume iliyolipwa na mfumo kwa njia ya "rejesho la pesa" inaweza kuondolewa na mtumiaji kwa njia sawa na tuzo za rufaa.

Wakati wa kutumia mfumo wa rufaa, kazi ya mfuko inapaswa kubadilishwa, iliyojengwa katika mantiki kuu ya akaunti ya smart ambayo mfumo utafanya kazi. Kwa mfano, ikiwa zawadi ya rufaa italipwa kwa dau lililofanywa, basi utendakazi wa hazina unapaswa kujumuishwa katika mantiki ambapo dau linafanywa (au hatua nyingine inayolengwa inafanywa ambayo malipo yake hulipwa). Kuna viwango vitatu vya zawadi za rufaa zilizowekwa katika kipengele hiki. Ikiwa unataka kufanya viwango vingi au kidogo, basi hii pia inasahihishwa katika msimbo. Asilimia ya zawadi imewekwa na viwango vya viwango vya level1-level3, katika msimbo huhesabiwa kama kiasi * kiwango / 1000, yaani, thamani 1 inalingana na 0,1% (hii inaweza pia kubadilishwa katika kanuni).

Simu ya kukokotoa hubadilisha salio la akaunti na pia huunda rekodi kwa madhumuni ya kuweka fomu:

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

Hiyo ni, wakati wa manunuzi ni wakati wa block ambayo iko. Hii ni ya kuaminika zaidi kuliko kutumia muhuri wa muda kutoka kwa shughuli yenyewe, haswa kwa vile haipatikani kutoka kwa simu inayoweza kupigwa.
Kitendo cha kuondoa huondoa zawadi zote zilizokusanywa kwa akaunti ya mtumiaji. Huunda maingizo kwa madhumuni ya ukataji miti:

# withdraw log: withdraw_user_txid=amount:timestamp

Programu

Sehemu kuu ya programu ni maktaba ya affiliate.js, ambayo ni daraja kati ya mifano ya data shirikishi na WAVES NODE REST API. Hutekeleza safu ya uondoaji inayojitegemea ya mfumo (yoyote inaweza kutumika). Kazi zinazofanya kazi (kujiandikisha, kuondoa) kudhani kwamba Waves Keeper imewekwa kwenye mfumo, maktaba yenyewe haina kuangalia hii.

Mbinu za utekelezaji:

fetchReferralTransactions
fetchWithdrawTransactions
fetchMyBalance
fetchReferrals
fetchReferer
withdraw
register

Utendaji wa mbinu ni dhahiri kutoka kwa majina, vigezo na data ya kurudi ni ilivyoelezwa katika kanuni. Kazi ya rejista inahitaji maoni ya ziada - huanza mzunguko wa uteuzi wa kitambulisho cha shughuli ili kuanza saa 123 - hii ni PoW captcha iliyoelezwa hapo juu, ambayo inalinda dhidi ya usajili wa wingi. Chaguo la kukokotoa hupata muamala na kitambulisho kinachohitajika, na kisha kusaini kupitia Mlinzi wa Waves.

Mpango wa ushirika wa DEX unapatikana kwa GitHub.com.

Chanzo: mapenzi.com

Kuongeza maoni