Ihe omume mmekọ mepere emepe na Waves blockchain

Mmemme mmekọ agbasasịghị na Waves blockchain, emejuputa atumatu dị ka akụkụ nke onyinye Waves Labs site n'aka ndị otu Bettex.

The post abụghị mgbasa ozi! Ihe omume a bụ isi mmalite, ojiji na nkesa bụ n'efu. Ojiji nke mmemme na-akpali mmepe nke dApp ngwa na n'ozuzu na-akwalite decentralization, nke na-erite uru na onye ọ bụla na-eji Ịntanetị.

Ihe omume mmekọ mepere emepe na Waves blockchain

dApp ewepụtara maka mmemme mmekọ bụ ndebiri maka ọrụ gụnyere mmekọ dịka akụkụ nke ọrụ ha. Enwere ike iji koodu ahụ dị ka ndebiri maka nnomi, dị ka ọba akwụkwọ, ma ọ bụ dị ka usoro echiche maka mmejuputa teknụzụ.

N'ihe gbasara ọrụ, nke a bụ usoro mmekọ mgbe niile nke na-emejuputa ndebanye aha na onye na-ezo aka, nchịkọta ọkwa dị iche iche nke ụgwọ ọrụ maka ntinye aka na mkpali maka ịdenye aha na usoro (cashback). Usoro ahụ bụ dApp "dị ọcha", ya bụ, ngwa weebụ na-emekọ ihe ozugbo na blockchain, na-enweghị ihe ndabere nke ya, nchekwa data, wdg.

Usoro eji eme ihe nwekwara ike ịba uru n'ọtụtụ ọrụ ndị ọzọ:

  • Ịkpọ akaụntụ smart n'ime ụgwọ na ịkwụ ụgwọ ozugbo (n'oge oku ahụ enweghị akara na akaụntụ iji kwụọ ụgwọ maka oku ahụ, ma ha na-apụta n'ebe ahụ n'ihi oku).
  • PoW-captcha - nchebe megide oku akpaaka dị elu na-arụ ọrụ akaụntụ smart - nke yiri captcha, mana site na akaebe nke iji akụrụngwa kọmputa.
  • Ajụjụ maka igodo data site na iji template.

Ngwa nwere:

  • Koodu akaụntụ smart n'asụsụ ride4dapps (nke, dị ka akwadoro, jikọtara ya na akaụntụ smart smart nke achọrọ ka arụ ọrụ mmekọ);
  • js wrapper nke na-emejuputa ọkwa abstraction n'elu WAVES NODE REST API;
  • koodu na vuejs framework, nke bụ ihe atụ nke iji ọbá akwụkwọ na RIDE code.

Ka anyị kọwaa atụmatụ niile edepụtara.

Na-akpọ akaụntụ smart maka ụgwọ na ịkwụ ụgwọ ozugbo

Ịkpọ InvokeScript chọrọ ịkwụ ụgwọ ụgwọ site na akaụntụ ahụ na-amalite azụmahịa ahụ. Nke a abụghị nsogbu ma ọ bụrụ na ị na-arụ ọrụ maka blockchain geeks ndị nwere ụfọdụ ego nke WAVES tokens na akaụntụ ha, ma ọ bụrụ na ngwaahịa a na-eji ndị ọha na eze mee ihe, nke a na-aghọ nsogbu siri ike. A sị ka e kwuwe, onye ọrụ ahụ aghaghị ilekọta ịzụrụ ihe ngosi WAVES (ma ọ bụ ihe onwunwe ọzọ kwesịrị ekwesị nke nwere ike iji kwụọ ụgwọ maka azụmahịa), nke na-eme ka ihe mgbochi dị ukwuu na-abanye na ọrụ ahụ. Anyị nwere ike kesaa ihe bara uru nye ndị ọrụ ga-enwe ike ịkwụ ụgwọ maka azụmahịa ma chere ihe ize ndụ nke iji ha eme ihe mgbe emepụtara sistemu akpaghị aka iji wepụta akụrụngwa mmiri mmiri na sistemụ anyị.

Ọ ga-adaba adaba ma ọ bụrụ na ọ ga-ekwe omume ịkpọ InvokeScript "na-akwụ ụgwọ nke onye nnata" ( akaụntụ smart nke etinyere edemede ahụ), na ohere dị otú ahụ, ọ bụ ezie na ọ bụghị n'ụzọ doro anya, dị.

Ọ bụrụ n'ime InvokeScript ị na-eme ScriptTransfer na adreesị onye na-akpọ oku, nke na-akwụ ụgwọ maka akara ego ejiri, mgbe ahụ, oku dị otú ahụ ga-aga nke ọma, ọ bụrụgodị na n'oge oku ahụ enweghị akụ na akaụntụ oku ahụ. Nke a ga-ekwe omume n'ihi na a na-eme nlele maka akara zuru oke mgbe a kpọchara azụmahịa ahụ, kama tupu ya, ka e wee nwee ike ịme azụmahịa na kredit, dabere na ịkwụghachi ozugbo.

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

Koodu dị n'okpuru na-akwụghachi ụgwọ ahụ ejiri ego akaụntụ smart. Iji chebe megide iji njirimara a eme ihe n'ụzọ na-ezighị ezi, ọ dị mkpa iji nlele na onye na-akpọ oku na-emefu ego ahụ n'ime ihe achọrọ yana n'ime oke ezi uche:

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
}

Ọzọkwa, iji kpuchido pụọ na mmefu ego ọjọọ na enweghị isi, a chọrọ nchedo oku akpaaka (PoW-captcha).

PoW-captcha

Echiche nke captcha na-egosi ọrụ abụghị ihe ọhụrụ ma emejuputala ya n'ọrụ dị iche iche, gụnyere ndị etinyere na ndabere nke WAVES. Echiche ahụ bụ na iji mee ihe na-eri ihe onwunwe anyị, onye na-akpọ oku aghaghị imefusị akụ nke ya, nke na-eme ka mwakpo mbelata akụ na ụba dị oke ọnụ. Maka nkwado dị mfe ma dị ọnụ ala nke onye zitere nke azụmahịa ahụ edozila nsogbu PoW, enwere nlele id azụmahịa:

ọ bụrụ na-ewere (toBase58String(i.transactionId), 3) != "123" wee tụfuo("ihe akaebe nke ọrụ dara") ọzọ

Iji mee azụmahịa, onye na-akpọ oku ga-ahọrọ paramita ndị dị otú ahụ ka koodu base58 (id) na-amalite na nọmba 123, nke kwekọrọ na nkezi ruo iri abụọ nke sekọnd nke oge nhazi ma nwee ezi uche maka ọrụ anyị. Ọ bụrụ na achọrọ PoW dị mfe ma ọ bụ dị mgbagwoju anya, mgbe ahụ, ọrụ ahụ nwere ike gbanwee ngwa ngwa n'ụzọ doro anya.

Ajụjụ maka igodo data site na iji template

Iji jiri blockchain dị ka nchekwa data, ọ dị mkpa ịnwe ngwa API maka ịza ajụjụ nchekwa data dị ka igodo-val dabere na ndebiri. Ngwa ngwa dị otú ahụ pụtara na mbido July 2019 n'ụdị parameter ?mgbakọ na arịrịọ REST API /adreesị/data?matches=regexp. Ugbu a, ọ bụrụ na anyị kwesịrị ịnweta ihe karịrị otu igodo site na ngwa weebụ na ọ bụghị igodo niile n'otu oge, mana naanị ụfọdụ otu, mgbe ahụ anyị nwere ike ịme nhọrọ site na aha isi. Dịka ọmụmaatụ, n'ime oru ngo a, a na-edobe azụmahịa mwepu dị ka

withdraw_${userAddress}_${txid}

nke na-enye gị ohere ịnweta ndepụta azụmahịa maka iwepụ ego maka adreesị ọ bụla enyere site na iji template:

?matches=withdraw_${userAddress}_.*

Ugbu a, ka anya na components nke okokụre ngwọta.

Koodu Vuejs

Koodu bụ ngosi na-arụ ọrụ nso na ezigbo ọrụ. Ọ na-arụ ọrụ nbanye site na Waves Keeper ma na-arụ ọrụ na affiliate.js Library, nke ọ na-edebanye aha onye ọrụ na usoro, na-ajụ ajụjụ data azụmahịa, ma na-enye gị ohere iwepụ ego enwetara na akaụntụ onye ọrụ.

Ihe omume mmekọ mepere emepe na Waves blockchain

Koodu maka RIDE

Ihe mejupụtara ndekọ aha, ego na iwepụ ọrụ.

Ọrụ ndekọ aha na-edebanye aha onye ọrụ na sistemụ. O nwere parampat abụọ: onye ntụgharị (adreesị onye na-ekwu okwu) na oke nnu, nke na-adịghị eji koodu ọrụ, nke achọrọ iji họrọ id azụmahịa (ọrụ PoW-captcha).

Ọrụ ahụ (dị ka ọrụ ndị ọzọ sitere na ọrụ a) na-eji usoro oku ụgwọ ụgwọ, nsonaazụ nke ọrụ ahụ bụ iji kwụọ ụgwọ ịkwụ ụgwọ maka ịkpọ ọrụ a. Ekele maka ngwọta a, onye ọrụ nke kere obere akpa nwere ike ịrụ ọrụ ozugbo na usoro ahụ ma ghara ichegbu onwe ya banyere ịzụta ma ọ bụ ịnweta ihe onwunwe nke na-enye ya ohere ịkwụ ụgwọ azụmahịa.

Nsonaazụ nke ọrụ ndebanye aha bụ ndekọ abụọ:

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

Nke a na-enye ohere ịgagharị na tụgharịa ọchụchọ (onye nrụtụaka nke onye ọrụ nyere na ntinye aka nke onye ọrụ nyere).

Ọrụ ego bụ ihe ndebiri maka ịmepụta ezigbo ọrụ. N'ụdị e gosipụtara, ọ na-ewe ego niile nke azụmahịa ahụ na-ebufe ma kesaa ya na akaụntụ nke ndị na-ezo aka na ọkwa 1, 2, 3, na akaụntụ "cashback" na akaụntụ "mgbanwe" (ihe ọ bụla fọdụrụ mgbe ekesara ya na mbụ. akaụntụ na-aga ebe a).

Cashback bụ ụzọ isi kpalie onye ọrụ njedebe isonye na usoro ntinye aka. Onye ọrụ nwere ike iwepụ akụkụ nke ọrụ ahụ nke usoro ahụ kwụrụ n'ụdị "ego azụ" n'otu ụzọ ahụ dị ka ụgwọ ọrụ maka ntinye aka.

Mgbe ị na-eji usoro ntinye aka, a ga-agbanwe ọrụ ego ahụ ma tinye ya n'ime echiche bụ isi nke akaụntụ smart nke usoro ahụ ga-arụ ọrụ. Dịka ọmụmaatụ, ọ bụrụ na akwụ ụgwọ ntinye aka maka nzọ emere, mgbe ahụ, a ga-arụ ọrụ ego ahụ n'ime ezi uche ebe etinye nzọ ahụ (ma ọ bụ ihe ọzọ ezubere iche maka nke a na-akwụ ụgwọ ọrụ). A na-edobe ọkwa nrụtụ aka atọ n'ime ọrụ a. Ọ bụrụ na ịchọrọ ịme ọkwa ma ọ bụ karịa, mgbe ahụ, a na-edozikwa nke a na koodu. A na-edozi pasentị ụgwọ ọrụ site na nkwụsịtụ larịị1-level3 na koodu a gbakọọ ya dị ka Ọnụ ego * ọkwa / 1000, ya bụ, uru 1 kwekọrọ na 0,1% (nke a nwekwara ike gbanwee na koodu).

Ịkpọ ọrụ na-agbanwe nguzozi akaụntụ ma mepụtakwa ndenye maka ebumnuche ntinye nke ụdị:

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

Ya bụ, oge azụmahịa bụ oge nke ngọngọ nke ọ dị. Nke a bụ ihe a pụrụ ịdabere na ya karịa iji stampụ oge site na azụmahịa ahụ n'onwe ya, karịsịa ebe ọ bụ na ọ dịghị site na oku a na-akpọ.
Ọrụ ndọrọ ego na-egosiputa ụgwọ ọrụ niile anakọtara na akaụntụ onye ọrụ. Na-emepụta ndenye maka ebumnuche ndekọ:

# withdraw log: withdraw_user_txid=amount:timestamp

Ngwa

Akụkụ bụ isi nke ngwa a bụ ọba akwụkwọ affiliate.js, nke bụ àkwà mmiri n'etiti ụdị data mmekọ yana WAVES NODE REST API. Na-eme ọkwa abstraction n'adabereghị na usoro (nke ọ bụla enwere ike iji). Ọrụ na-arụ ọrụ (ndebanye aha, wepụ) chere na arụnyere Waves Keeper na sistemụ ahụ n'onwe ya anaghị elele nke a.

Na-eme usoro:

fetchReferralTransactions
fetchWithdrawTransactions
fetchMyBalance
fetchReferrals
fetchReferer
withdraw
register

Arụ ọrụ nke ụzọ ndị ahụ doro anya site na aha ndị a na-akọwapụta na data eweghachiri na koodu. Ọrụ ndekọ aha chọrọ nkọwa ndị ọzọ - ọ na-amalite usoro nke ịhọrọ id azụmahịa ka ọ malite na 123 - nke a bụ PoW-captcha akọwara n'elu, nke na-echebe megide ndebanye aha ọtụtụ. Ọrụ ahụ na-achọta azụmahịa na id achọrọ, wee bịanye aka na ya site na Waves Keeper.

Mmemme mmekọ DEX dị na GitHub.com.

isi: www.habr.com

Tinye a comment