Desentralisado, bukas nga gigikanan nga programa nga kaakibat sa Waves blockchain

Usa ka desentralisadong programa sa kaakibat sa Waves blockchain, nga gipatuman isip bahin sa usa ka Waves Labs grant sa Bettex team.

Ang post dili advertising! Ang programa mao ang bukas nga gigikanan, ang paggamit ug pag-apod-apod niini libre. Ang paggamit sa programa makapadasig sa pagpalambo sa mga aplikasyon sa dApp ug sa kasagaran nagpasiugda sa desentralisasyon, nga nakabenepisyo sa matag tiggamit sa Internet.

Desentralisado, bukas nga gigikanan nga programa nga kaakibat sa Waves blockchain

Ang gipresentar nga dApp alang sa mga programa sa kaakibat usa ka template alang sa mga proyekto nga adunay kauban nga bahin sa ilang pag-andar. Ang code mahimong gamiton isip template sa pagkopya, isip library, o isip set sa mga ideya para sa teknikal nga pagpatuman.

Sa termino sa pag-andar, kini usa ka regular nga sistema sa kaakibat nga nagpatuman sa pagparehistro nga adunay referrer, multi-level nga accrual sa mga ganti alang sa mga referral ug pagdasig sa pagparehistro sa sistema (cashback). Ang sistema usa ka "putli" nga dApp, nga mao, ang aplikasyon sa web direkta nga nakig-uban sa blockchain, nga wala’y kaugalingon nga backend, database, ug uban pa.

Mga teknik nga gigamit nga mahimo usab nga mapuslanon sa daghang uban pang mga proyekto:

  • Ang pagtawag sa usa ka intelihente nga account sa utang nga adunay diha-diha nga pagbayad (sa oras sa pagtawag wala’y mga token sa account aron mabayran ang tawag, apan kini makita ingon usa ka sangputanan sa tawag).
  • PoW-captcha - proteksiyon batok sa high-frequency automated nga mga tawag sa smart account functions - susama sa captcha, apan pinaagi sa pamatuod sa paggamit sa computing resources.
  • Pangutana alang sa mga yawe sa datos gamit ang usa ka template.

Ang aplikasyon naglangkob sa:

  • smart account code sa ride4dapps nga pinulongan (nga, ingon sa giplano, gihiusa ngadto sa nag-unang smart account diin ang affiliate functionality kinahanglan nga ipatuman);
  • js wrapper nga nagpatuman ug abstraction level sa WAVES NODE REST API;
  • code sa vuejs framework, nga usa ka pananglitan sa paggamit sa library ug RIDE code.

Atong ihulagway ang tanan nga nalista nga mga bahin.

Pagtawag sa usa ka maalamon nga account alang sa utang nga adunay diha-diha nga pagbayad

Ang pagtawag sa InvokeScript nanginahanglan ug bayad sa bayad gikan sa account nga nagsugod sa transaksyon. Dili kini problema kung naghimo ka usa ka proyekto alang sa mga blockchain geeks nga adunay usa ka piho nga kantidad sa mga token sa WAVES sa ilang account, apan kung ang produkto gitumong nga gamiton sa kadaghanan sa publiko, kini mahimong usa ka seryoso nga problema. Human sa tanan, ang tiggamit kinahanglan nga mag-amping sa pagpalit sa mga token sa WAVES (o lain nga angay nga asset nga magamit sa pagbayad sa mga transaksyon), nga nagdugang sa na igo nga babag sa pagsulod sa proyekto. Mahimo namon nga ipang-apod-apod ang usa ka asset sa mga tiggamit nga makahimo sa pagbayad alang sa mga transaksyon ug atubangon ang peligro sa ilang sayop nga paggamit kung ang mga awtomatikong sistema gihimo aron mag-pump out sa usa ka likido nga asset gikan sa among sistema.

Mahimong sayon ​​​​kaayo kung posible nga tawagan ang InvokeScript "sa gasto sa nakadawat" (ang intelihente nga account diin gi-install ang script), ug ang ingon nga posibilidad, bisan kung dili sa klaro nga paagi, naglungtad.

Kung sa sulod sa InvokeScript maghimo ka usa ka ScriptTransfer sa adres sa nagtawag, nga nagbayad sa mga token sa bayad nga gigasto, nan ang ingon nga tawag magmalampuson, bisan kung sa panahon sa pagtawag wala’y mga kabtangan sa account sa pagtawag. Posible kini tungod kay ang tseke alang sa igo nga mga token gihimo pagkahuman sa pagtawag sa transaksyon, kaysa sa wala pa kini, aron ang mga transaksyon mahimo sa kredito, nga gipailalom sa diha-diha nga pagbayad.

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

Ang code sa ubos nagbayad sa gigasto nga bayad gamit ang mga pondo sa smart account. Aron mapanalipdan batok sa sayop nga paggamit niini nga bahin, gikinahanglan ang paggamit sa usa ka tseke nga ang nanawag mogasto sa bayad sa gikinahanglan nga asset ug sulod sa makatarunganon nga mga limitasyon:

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
}

Usab, aron mapanalipdan batok sa malisyoso ug walay hinungdan nga pag-usik sa mga pondo, gikinahanglan ang awtomatik nga proteksyon sa tawag (PoW-captcha).

PoW-captcha

Ang ideya sa proof-of-work captcha dili na bag-o ug gipatuman na sa lainlaing mga proyekto, lakip ang gipatuman base sa WAVES. Ang ideya mao nga aron mahimo ang usa ka aksyon nga nagkonsumo sa mga kapanguhaan sa among proyekto, ang nagtawag kinahanglan usab nga mogasto sa kaugalingon nga mga kapanguhaan, nga naghimo sa usa ka pag-atake sa pagkunhod sa kapanguhaan nga medyo mahal. Alang sa usa ka dali ug barato nga pag-validate nga ang nagpadala sa transaksyon nakasulbad sa problema sa PoW, adunay usa ka pagsusi sa id sa transaksyon:

kung take(toBase58String(i.transactionId), 3) != “123” unya ilabay(“pamatuod sa trabaho napakyas”) lain

Aron mahimo ang usa ka transaksyon, ang nagtawag kinahanglan nga mopili sa ingon nga mga parameter aron ang base58 code (id) magsugod sa mga numero 123, nga katumbas sa aberids sa usa ka magtiayon nga napulo ka segundo sa oras sa processor ug sa kasagaran makatarunganon alang sa among buluhaton. Kung gikinahanglan ang usa ka mas simple o mas komplikado nga PoW, nan ang buluhaton dali nga mabag-o sa klaro nga paagi.

Pangutana alang sa mga yawe sa datos gamit ang usa ka template

Aron magamit ang blockchain ingon usa ka database, hinungdanon nga adunay mga himan sa API alang sa pagpangutana sa database ingon nga key-val base sa mga templates. Ang ingon nga toolkit nagpakita sa sinugdanan sa Hulyo 2019 sa porma sa usa ka parameter ?mga posporo sa REST API nga hangyo /addresses/data?matches=regexp. Karon, kung kinahanglan namon nga makakuha labaw pa sa usa ka yawe gikan sa usa ka aplikasyon sa web ug dili tanan nga mga yawe sa usa ka higayon, apan pipila ra nga grupo, nan mahimo namon ang pagpili pinaagi sa yawe nga ngalan. Pananglitan, sa kini nga proyekto, ang mga transaksyon sa pag-atras gi-encode ingon

withdraw_${userAddress}_${txid}

nga nagtugot kanimo nga makakuha usa ka lista sa mga transaksyon alang sa pag-atras sa mga pondo alang sa bisan unsang gihatag nga adres gamit ang template:

?matches=withdraw_${userAddress}_.*

Karon atong tan-awon ang mga sangkap sa nahuman nga solusyon.

Vuejs code

Ang code usa ka nagtrabaho nga demo nga duol sa tinuod nga proyekto. Gipatuman niini ang pag-login pinaagi sa Waves Keeper ug nagtrabaho kauban ang affiliate.js library, diin girehistro niini ang user sa sistema, gipangutana ang mga datos sa transaksyon, ug gitugotan ka usab nga i-withdraw ang nakuha nga pondo sa account sa tiggamit.

Desentralisado, bukas nga gigikanan nga programa nga kaakibat sa Waves blockchain

Code para sa RIDE

Naglangkob sa register, fund ug withdraw functions.

Ang register function nagparehistro sa usa ka user sa sistema. Kini adunay duha ka mga parameter: referer (referrer address) ug ang asin parameter, nga wala gigamit sa function code, nga gikinahanglan aron mapili ang transaction id (PoW-captcha task).

Ang function (sama sa ubang mga gimbuhaton gikan niini nga proyekto) naggamit sa pamaagi sa pagtawag sa utang, ang resulta sa function mao ang paggasto sa pagbayad sa bayad alang sa pagtawag niini nga function. Salamat sa kini nga solusyon, ang usa ka tiggamit nga bag-o lang nakamugna og pitaka mahimo dayon nga magtrabaho sa sistema ug dili kinahanglan mabalaka bahin sa pagpalit o pagdawat usa ka asset nga nagtugot kaniya sa pagbayad sa bayad sa transaksyon.

Ang resulta sa registration function mao ang duha ka mga rekord:

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

Gitugotan niini ang mga pagpangita sa unahan ug balihon (ang referrer sa gihatag nga tiggamit ug tanan nga mga referral sa gihatag nga tiggamit).

Ang function sa pondo labaw pa sa usa ka template alang sa pagpalambo sa tinuod nga gamit. Sa gipresentar nga porma, gikuha ang tanan nga mga pondo nga gibalhin sa transaksyon ug giapod-apod kini sa mga account sa mga referrer sa lebel 1, 2, 3, sa "cashback" nga account ug ang "pagbag-o" nga account (tanan nga nahabilin kung ipanghatag sa nauna. ang mga account moadto dinhi).

Ang cashback usa ka paagi sa pagdasig sa end user nga moapil sa referral system. Mahimong i-withdraw sa user ang bahin sa komisyon nga gibayad sa sistema sa porma sa “cashback” sa samang paagi sa mga ganti sa mga referral.

Kung mogamit usa ka sistema sa referral, ang function sa pondo kinahanglan nga usbon ug i-integrate sa panguna nga lohika sa smart account diin molihok ang sistema. Pananglitan, kung ang usa ka referral nga ganti gibayran alang sa usa ka pusta nga gihimo, nan ang function sa pundo kinahanglan nga matukod sa lohika kung diin gibutang ang pusta (o lain nga gipunting nga aksyon ang gihimo kung diin gibayran ang ganti). Tulo ka lebel sa mga ganti sa referral ang gi-code sa kini nga function. Kung kinahanglan nimo nga maghimo labi pa o gamay nga lebel, nan kini gitul-id usab sa code. Ang porsyento nga ganti gitakda sa lebel1-level3 nga mga kanunay sa code nga kini gikalkula ingon kantidad * lebel / 1000, nga mao, ang bili 1 katumbas sa 0,1% (kini mahimo usab nga usbon sa code).

Ang pagtawag sa function nagbag-o sa balanse sa account ug nagmugna usab og mga entry alang sa mga katuyoan sa pag-log sa porma:

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

Sa ato pa, ang oras sa transaksyon mao ang oras sa block diin kini nahimutang. Kini mas kasaligan kay sa paggamit sa timestamp gikan sa transaksyon mismo, ilabi na kay dili kini makuha gikan sa callable.
Ang withdraw function nagpakita sa tanang natipon nga mga ganti sa account sa user. Naghimo og mga entry alang sa mga katuyoan sa pag-log:

# withdraw log: withdraw_user_txid=amount:timestamp

Paggamit

Ang panguna nga bahin sa aplikasyon mao ang librarya sa affiliate.js, nga usa ka tulay tali sa mga modelo sa datos nga kaakibat ug ang WAVES NODE REST API. Nagpatuman sa lebel sa abstraction nga independente sa framework (bisan kinsa mahimong gamiton). Ang mga aktibo nga gimbuhaton (pagparehistro, pag-withdraw) nagtuo nga ang Waves Keeper na-install sa sistema mismo wala magsusi niini.

Nagpatuman sa mga pamaagi:

fetchReferralTransactions
fetchWithdrawTransactions
fetchMyBalance
fetchReferrals
fetchReferer
withdraw
register

Ang pag-andar sa mga pamaagi klaro gikan sa mga ngalan ug ang mga parameter ug gibalik nga datos gihulagway sa code. Ang function sa rehistro nanginahanglan dugang nga mga komento - nagsugod kini usa ka siklo sa pagpili sa id sa transaksyon aron magsugod kini sa 123 - kini ang PoW-captcha nga gihulagway sa ibabaw, nga nanalipod batok sa mga pagrehistro sa masa. Ang function nangita usa ka transaksyon nga adunay gikinahanglan nga id, ug dayon pirmahan kini pinaagi sa Waves Keeper.

Ang programa nga kaakibat sa DEX anaa sa GitHub.com.

Source: www.habr.com

Idugang sa usa ka comment