Open source decentralized papahana pili ma ka Waves blockchain

ʻO kahi papahana pili i hoʻokaʻawale ʻia ma ka Waves blockchain, i hoʻokō ʻia ma ke ʻano he haʻawina Waves Labs e ka hui Bettex.

ʻAʻole hoʻolaha ka pou! He kumu wehe ka polokalamu, manuahi ka hoʻohana ʻana a me ka hāʻawi ʻana. Hoʻoulu ka hoʻohana ʻana i ka papahana i ka hoʻomohala ʻana i nā noi dApp a hoʻolaha maʻamau i ka decentralization, e pōmaikaʻi ana i kēlā me kēia mea hoʻohana pūnaewele.

Open source decentralized papahana pili ma ka Waves blockchain

ʻO ka dApp i hōʻike ʻia no nā papahana pili he kumu hoʻohālike no nā papahana e komo pū ana me ka ʻāpana o kā lākou hana. Hiki ke hoʻohana ʻia ke code ma ke ʻano he laʻana no ke kope ʻana, ma ke ʻano he waihona, a i ʻole he mau manaʻo no ka hoʻokō ʻenehana.

Ma ke ʻano o ka hana, he ʻōnaehana pili maʻamau kēia e hoʻokō nei i ka hoʻopaʻa inoa me ka mea kuhikuhi, ka nui o nā pae kiʻekiʻe o nā uku no nā kuhikuhi a me ka hoʻoikaika ʻana no ke kākau inoa ʻana i ka ʻōnaehana (cashback). ʻO ka ʻōnaehana he "maʻemaʻe" dApp, ʻo ia hoʻi, pili pono ka noi pūnaewele me ka blockchain, me ka ʻole o kāna backend, database, etc.

ʻO nā ʻenehana i hoʻohana ʻia i hiki ke hoʻohana i nā papahana ʻē aʻe he nui:

  • Ke kāhea ʻana i kahi moʻokāki akamai i ka ʻaiʻē me ka uku koke ʻana (i ka manawa o ke kelepona ʻana ʻaʻohe mau hōʻailona ma ka moʻokāki e uku ai i ke kelepona, akā ʻike ʻia lākou ma muli o ke kelepona).
  • ʻO PoW-captcha — ka pale ʻana i ke kelepona ʻakomi kiʻekiʻe o nā hana moʻokāki akamai — e like me captcha, akā ma o ka hōʻoia ʻana o ka hoʻohana ʻana i nā kumuwaiwai helu helu.
  • Nīnau no nā kī ʻikepili me ka hoʻohana ʻana i ka laʻana.

Aia ka palapala noi:

  • ʻO ke code moʻokāki akamai ma ka ʻōlelo ride4dapps (ʻo ia, e like me ka mea i hoʻolālā ʻia, ua hoʻohui ʻia i loko o ka moʻokāki akamai nui e pono ai ke hoʻokō ʻia nā hana pili);
  • js wrapper e hoʻokō ana i kahi pae abstraction ma luna o ka WAVES NODE REST API;
  • code ma ka vuejs framework, he laʻana ia o ka hoʻohana ʻana i ka waihona a me ka code RIDE.

E wehewehe mākou i nā hiʻohiʻona i helu ʻia.

Ke kāhea ʻana i kahi moʻokāki akamai no ka ʻaiʻē me ka uku koke

Pono ke kāhea ʻana iā InvokeScript i ka uku o ka uku mai ka moʻokāki e hoʻomaka ana i ke kālepa. ʻAʻole kēia he pilikia inā ʻoe e hana nei i kahi papahana no nā geeks blockchain i loaʻa i kahi nui o nā hōʻailona WAVES i kā lākou moʻokāki, akā inā makemake ʻia ka huahana e hoʻohana ʻia e ka lehulehu —  lilo kēia i pilikia koʻikoʻi. Ma hope o nā mea a pau, pono e mālama ka mea hoʻohana i ke kūʻai ʻana i nā hōʻailona WAVES (a i ʻole nā ​​​​waiwai kūpono ʻē aʻe e hiki ke hoʻohana ʻia e uku no nā kālepa), e hoʻonui ai i ka paepae nui no ke komo ʻana i ka papahana. Hiki iā mākou ke hāʻawi i kahi waiwai i nā mea hoʻohana e hiki ke uku no nā kālepa a kū i ka pilikia o kā lākou hoʻohana hewa ʻana i ka wā i hana ʻia ai nā ʻōnaehana automated e puhi i kahi waiwai wai mai kā mākou ʻōnaehana.

He mea maʻalahi loa inā hiki ke kāhea iā InvokeScript "ma ka uku o ka mea loaʻa" (ʻo ka moʻokāki akamai kahi i hoʻokomo ʻia ai ka palapala), a ʻo ia ʻano hiki, ʻoiai ʻaʻole ma ke ʻano maopopo.

Inā i loko o InvokeScript e hana ʻoe i kahi ScriptTransfer i ka helu o ka mea kelepona, e uku ana i nā hōʻailona uku i hoʻopau ʻia, a laila e kūleʻa kēlā kelepona ʻana, ʻoiai inā ʻaʻohe waiwai ma ka helu kelepona i ka manawa o ke kelepona. Hiki paha kēia no ka mea ua hana ʻia ka māka no nā hōʻailona kūpono ma hope o ke kāhea ʻia ʻana o ke kālepa, ʻaʻole ma mua o ia, i hiki ke hana ʻia nā hana ma ka hōʻaiʻē, ma muli o ka uku koke ʻana.

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

Hoʻihoʻi ka code ma lalo i ka uku i hoʻohana ʻia me ke kālā moʻokāki akamai. No ka pale ʻana i ka hoʻohana hewa ʻana i kēia hiʻohiʻona, pono e hoʻohana i kahi hōʻoia e hoʻolilo ka mea kelepona i ka uku ma ka waiwai i koi ʻia a i loko o nā palena kūpono:

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
}

Eia kekahi, no ka pale ʻana i ka ʻinoʻino a me ka naʻaupō ʻole o ke kālā, pono ke pale kelepona kelepona (PoW-captcha).

PoW-captcha

ʻAʻole hou ka manaʻo o ka proof-of-work captcha a ua hoʻokō ʻia i nā papahana like ʻole, me nā mea i hoʻokō ʻia ma ke kumu o WAVES. ʻO ka manaʻo, no ka hana ʻana i kahi hana e hoʻopau ai i nā kumu waiwai o kā mākou papahana, pono e hoʻolilo ka mea kelepona i kāna mau waiwai ponoʻī, kahi e lilo ai ka hoʻouka ʻana i ka waiwai waiwai. No ka hōʻoia maʻalahi a me ka haʻahaʻa haʻahaʻa i hoʻoponopono ai ka mea hoʻouna i ke kālepa i ka pilikia PoW, aia kahi hōʻoia id transaction:

inā lawe (toBase58String(i.transactionId), 3) != “123” a laila hoʻolei (“hōʻoia o ka hana ʻole”) ʻē aʻe

I mea e hoʻokō ai i kahi kālepa, pono ka mea kelepona e koho i kēlā mau ʻāpana i hoʻomaka kāna code base58 (id) me nā helu 123, e pili ana i ka awelika i ʻelua mau kekona o ka manawa kaʻina hana a kūpono i kā mākou hana. Inā makemake ʻia kahi PoW maʻalahi a paʻakikī paha, a laila hiki ke hoʻololi maʻalahi i ka hana ma ke ʻano maopopo.

Nīnau no nā kī ʻikepili me ka hoʻohana ʻana i ka laʻana

I mea e hoʻohana ai i ka blockchain ma ke ʻano he waihona, he mea nui ka loaʻa ʻana o nā mea hana API no ka nīnau ʻana i ka waihona ma ke ʻano he kī-val e pili ana i nā templates. Ua ʻike ʻia kēlā ʻano mea hana i ka hoʻomaka ʻana o Iulai 2019 ma ke ʻano o kahi ʻāpana pāʻani ma ke noi REST API /addresses/data?matches=regexp. I kēia manawa, inā pono mākou e kiʻi i ʻoi aku ma mua o hoʻokahi kī mai kahi noi pūnaewele a ʻaʻole nā ​​kī āpau i ka manawa hoʻokahi, akā i kahi hui wale nō, a laila hiki iā mākou ke koho ma ka inoa kī. No ka laʻana, i loko o kēia papahana, ua hoʻopili ʻia nā hana withdrawal e like me

withdraw_${userAddress}_${txid}

e ʻae iā ʻoe e kiʻi i kahi papa inoa o nā kālepa no ka hoʻihoʻi ʻana i ke kālā no kēlā me kēia helu i hāʻawi ʻia me ka hoʻohana ʻana i ka template:

?matches=withdraw_${userAddress}_.*

I kēia manawa, e nānā kāua i nā ʻāpana o ka hopena i hoʻopau ʻia.

Code Vuejs

ʻO ke code he demo hana kokoke i ka papahana maoli. Hoʻokomo ʻo ia i ka hoʻopaʻa inoa ma o Waves Keeper a hana pū me ka waihona affiliate.js, kahi e hoʻopaʻa inoa ai i ka mea hoʻohana i ka ʻōnaehana, nīnau i ka ʻikepili kālepa, a hiki nō hoʻi iā ʻoe ke hoʻihoʻi i nā kālā i loaʻa i ka moʻokāki o ka mea hoʻohana.

Open source decentralized papahana pili ma ka Waves blockchain

Code no RIDE

Aia i loko o ka papa inoa, ka waihona kālā a me ka wehe ʻana i nā hana.

Hoʻopaʻa inoa ka hana hoʻopaʻa inoa i kahi mea hoʻohana ma ka ʻōnaehana. Loaʻa iā ia ʻelua mau palena: referer (referrer address) a me ka paʻakai paʻakai, ʻaʻole i hoʻohana ʻia i ka code function, pono e koho i ka id transaction (PoW-captcha task).

Hoʻohana ka hana (e like me nā hana ʻē aʻe mai kēia papahana) i ka ʻenehana kelepona ʻaiʻē, ʻo ka hopena o ka hana ʻo ia ke kālā i ka uku ʻana i kahi uku no ke kāhea ʻana i kēia hana. Mahalo i kēia hoʻonā, hiki i kahi mea hoʻohana i hana i kahi ʻeke kālā ke hana koke me ka ʻōnaehana a ʻaʻole hopohopo e pili ana i ke kūʻai ʻana a i ʻole ka loaʻa ʻana o kahi waiwai e hiki ai iā ia ke uku i ka uku kālepa.

ʻO ka hopena o ka hana hoʻopaʻa inoa ʻelua mau moʻolelo:

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

Hāʻawi kēia i ka huli ʻana i mua a me ka huli ʻana (ka mea kuhikuhi o ka mea hoʻohana i hāʻawi ʻia a me nā kuhikuhi a pau o kahi mea hoʻohana i hāʻawi ʻia).

ʻO ka hana kālā he ʻano hoʻohālike no ka hoʻomohala ʻana i ka hana maoli. Ma kāna ʻano i hōʻike ʻia, lawe ʻia nā kālā āpau i hoʻoili ʻia e ke kālepa a hāʻawi iā lākou i nā moʻohelu o nā mea kuhikuhi o nā pae 1, 2, 3, i ka moʻokāki "cashback" a me ka moʻokāki "hoʻololi" (nā mea āpau i ka wā i hāʻawi ʻia i mua. hele nā ​​moʻokāki ma ʻaneʻi).

ʻO ka Cashback kahi mea e hoʻoulu ai i ka mea hoʻohana hope e komo i ka ʻōnaehana referral. Hiki i ka mea hoʻohana ke hoʻihoʻi i ka ʻāpana o ke komisina i uku ʻia e ka ʻōnaehana ma ke ʻano o ka "cashback" ma ke ʻano like me nā uku no nā kuhikuhi.

I ka hoʻohana ʻana i kahi ʻōnaehana referral, pono e hoʻololi a hoʻohui ʻia ka hana kālā i loko o ka manaʻo nui o ka moʻohelu akamai kahi e hana ai ka ʻōnaehana. No ka laʻana, inā e uku ʻia ka uku no ka bet i hana ʻia, a laila pono e kūkulu ʻia ka hana kālā i loko o ka loiloi kahi i kau ʻia ai ka bet (a i ʻole hana ʻia kahi hana ʻē aʻe e uku ʻia ai ka uku). ʻEkolu mau pae o nā uku kuhikuhi i hoʻopaʻa ʻia i kēia hana. Inā pono ʻoe e hoʻonui a liʻiliʻi paha nā pae, a laila hoʻoponopono ʻia kēia ma ke code. Hoʻonohonoho ʻia ka pākēneka o ka uku e ka level1-level3 mau; ma ke code ua helu ʻia ʻo ia nui * pae / 1000, 'o ia ho'i, pili ka waiwai 1 i ka 0,1% (hiki ke ho'ololi 'ia ma ke code).

Hoʻololi ke kāhea ʻana i ka hana i ke koena moʻokāki a hana pū kekahi i nā mea komo no ka hoʻopaʻa inoa ʻana o ke ʻano:

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

ʻO ia hoʻi, ʻo ka manawa kūʻai ka manawa o ka poloka i loaʻa ai. ʻOi aku ka hilinaʻi o kēia ma mua o ka hoʻohana ʻana i ka timestamp mai ke kālepa ponoʻī, ʻoiai ʻaʻole i loaʻa mai ka callable.
Hōʻike ka hana withdraw i nā uku i hōʻiliʻili ʻia i ka moʻokāki o ka mea hoʻohana. Hoʻokumu i nā memo no ka hoʻopaʻa inoa ʻana:

# withdraw log: withdraw_user_txid=amount:timestamp

Ka hoʻohana

ʻO ka hapa nui o ka noi ʻo ia ka waihona affiliate.js, kahi alahaka ma waena o nā hiʻohiʻona ʻikepili pili a me ka WAVES NODE REST API. Hoʻokō i kahi pae abstraction kūʻokoʻa i ka framework (hiki ke hoʻohana ʻia kekahi). Manaʻo nā hana ikaika (kāinoa, haʻalele) ua hoʻokomo ʻia ʻo Waves Keeper ma ka ʻōnaehana; ʻaʻole nānā ka hale waihona puke i kēia.

Hoʻohana i nā ʻano hana:

fetchReferralTransactions
fetchWithdrawTransactions
fetchMyBalance
fetchReferrals
fetchReferer
withdraw
register

ʻIke ʻia ka hana o nā ala mai nā inoa; ua wehewehe ʻia nā ʻāpana a me nā ʻikepili i hoʻihoʻi ʻia ma ke code. Pono ka hana hoʻopaʻa inoa i nā manaʻo hou - hoʻomaka ia i kahi pōʻai o ke koho ʻana i ka id kālepa a hoʻomaka ia ma 123 - ʻo ia ka PoW-captcha i hōʻike ʻia ma luna nei, e pale ana i ka hoʻopaʻa inoa ʻana. Loaʻa ka hana i kahi kālepa me ka id i koi ʻia, a laila kau inoa ma o Waves Keeper.

Loaʻa ka papahana pili DEX ma GitHub.com.

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka