Opinn uppspretta dreifð hlutdeildarforrit á Waves blockchain

Dreifð samstarfsverkefni byggt á Waves blockchain, útfært sem hluti af Waves Labs styrk frá Bettex teyminu.

Færsla er ekki kostuð! Forritið er opinn uppspretta, notkun þess og dreifing er ókeypis. Notkun forritsins örvar þróun dApp forrita og stuðlar almennt að valddreifingu, sem er gagnlegt fyrir alla notendur netsins.

Opinn uppspretta dreifð hlutdeildarforrit á Waves blockchain

Kynnt dApp fyrir tengd forrit er sniðmát fyrir verkefni sem innihalda tengda sem hluta af virkni þeirra. Hægt er að nota kóðann sem sniðmát til að afrita, sem bókasafn eða sem safn hugmynda fyrir tæknilega útfærslu.

Hvað varðar virkni er þetta venjulegt samstarfskerfi sem útfærir skráningu hjá tilvísunaraðila, fjölþrepa uppsöfnun verðlauna fyrir tilvísanir og hvatningu til að skrá sig í kerfið (cashback). Kerfið er „hreint“ dApp, það er að vefforritið hefur bein samskipti við blockchain, án þess að hafa eigin bakenda, gagnagrunn osfrv.

Notuð er tækni sem einnig getur nýst í mörgum öðrum verkefnum:

  • Að hringja í snjallreikning á inneign með tafarlausri endurgreiðslu (þegar hringt er, eru engir tákn á reikningnum til að greiða fyrir símtalið, en þeir birtast þar í kjölfar símtalsins).
  • PoW-captcha - vörn gegn sjálfvirku hátíðnikalli í snjallreikningsaðgerðum - svipað og captcha, en með sönnun á notkun tölvuauðlinda.
  • Beiðni um gagnalykla eftir sniðmáti.

Umsóknin samanstendur af:

  • snjallreikningskóði á ride4dapps tungumálinu (sem, eins og áætlað var, er sameinaður aðalsnjallreikningnum, sem þú þarft að innleiða hlutdeildarvirknina fyrir);
  • js umbúðir sem útfærir abstraktlag yfir WAVES NODE REST API;
  • kóða á vuejs ramma, sem er dæmi um að nota bókasafnið og RIDE kóðann.

Við skulum lýsa öllum eiginleikum sem taldir eru upp.

Að skuldsetja snjallreikning með tafarlausri endurgreiðslu

Að hringja í InvokeScript krefst greiðslu gjalds af reikningnum sem hóf viðskiptin. Þetta er ekki vandamál ef þú ert að gera verkefni fyrir blockchain nörda sem eru með ákveðinn fjölda WAVES tákna á reikningnum sínum, en ef varan er ætluð fjöldanum verður þetta alvarlegt vandamál. Þegar öllu er á botninn hvolft verður notandinn að sjá um kaup á WAVES-táknum (eða annarri viðeigandi eign sem hægt er að nota til að greiða fyrir viðskipti), sem eykur nú þegar töluverðan þröskuld til að komast inn í verkefnið. Við getum dreift eignum til notenda sem fá að greiða fyrir viðskipti og standa frammi fyrir hættu á misnotkun þeirra þegar sjálfvirk kerfi eru búin til til að dæla lausafjármunum úr kerfinu okkar.

Það væri mjög þægilegt ef hægt væri að kalla InvokeScript „á kostnað viðtakandans“ (snjallreikningurinn sem handritið er sett upp á), og sá möguleiki er fyrir hendi, þó ekki á augljósan hátt.

Ef, inni í InvokeScript, er ScriptTransfer gerð á heimilisfang þess sem hringir, sem bætir upp eyðsluna sem varið er í gjaldið, þá mun slíkt símtal heppnast, jafnvel þótt engar eignir hafi verið á símareikningnum þegar hringt var. Þetta er mögulegt vegna þess að ávísun á nægilega mörg tákn er gerð eftir að færslunni er hringt, en ekki á undan henni, þannig að hægt sé að gera færslur á lánsfé, að því gefnu að þau séu strax innleyst.

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

Kóðinn hér að neðan endurgreiðir eytt gjald með snjallreikningsfé. Til að verjast misnotkun á þessum eiginleika verður þú að nota ávísun á að sá sem hringir eyði gjaldinu í rétta eign og innan skynsamlegra marka:

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
}

Einnig, til að vernda gegn illgjarnri og tilgangslausri sóun á fjármunum, þarf vernd gegn sjálfvirku símtali (PoW-captcha).

PoW-captcha

Sjálf hugmyndin um sönnun fyrir vinnu captcha er ekki ný og hefur þegar verið innleidd í ýmsum verkefnum, þar á meðal þeim sem byggjast á WAVES. Tilgangur hugmyndarinnar er sá að til að framkvæma aðgerð sem sóar auðlindum verkefnisins okkar þarf sá sem hringir einnig að eyða eigin auðlindum, sem gerir auðlindaárás ansi kostnaðarsama. Fyrir mjög auðveldan og ódýran sannprófun á því að sendandi færslunnar hafi leyst PoW vandamálið, er til færslu auðkenni athugun:

if take(toBase58String(i.transactionId), 3) != “123” then throw(“proof of work failed”) else

Til að framkvæma viðskipti verður sá sem hringir að velja slíkar færibreytur þannig að base58 kóða hans (id) byrjar á tölunum 123, sem samsvarar að meðaltali nokkra tugi sekúndna af örgjörvatíma og er almennt sanngjarnt fyrir verkefni okkar. Ef krafist er einfaldara eða flóknara PoW, þá er auðvelt að breyta verkefninu á augljósan hátt.

Leitaðu að gagnalykla eftir sniðmáti

Til að nota blockchain sem gagnagrunn er mikilvægt að hafa API verkfæri til að spyrjast fyrir um gagnagrunninn sem lykilval með sniðmátum. Slík verkfærakista birtist í byrjun júlí 2019 sem færibreyta ? eldspýtur við REST API beiðnina /addresses/data?matches=regexp. Nú, ef við þurfum að fá fleiri en einn takka og ekki alla lykla í einu úr vefforritinu, heldur aðeins einhvern hóp, þá getum við valið eftir nafni lykilsins. Til dæmis, í þessu verkefni, eru úttektarfærslur kóðaðar sem

withdraw_${userAddress}_${txid}

sem gerir þér kleift að fá lista yfir viðskipti til að taka út fjármuni fyrir hvaða heimilisfang sem er með því að nota sniðmátið:

?matches=withdraw_${userAddress}_.*

Nú skulum við greina íhluti fullunnar lausnar.

vuejs kóða

Kóðinn er virka kynning, nálægt alvöru verkefni. Það útfærir innskráningu í gegnum Waves Keeper og vinnur með affiliate.js bókasafninu, með hjálp þess skráir það notanda í kerfið, leitar eftir viðskiptagögnum og gerir þér einnig kleift að taka út áunnið fé á reikning notandans.

Opinn uppspretta dreifð hlutdeildarforrit á Waves blockchain

Kóði á RIDE

Samanstendur af skráningar-, fjármögnunar- og úttektaraðgerðum.

Skráningaraðgerðin skráir notanda í kerfið. Það hefur tvær breytur: tilvísun (tilvísunarfang) og saltfæribreytan sem ekki er notuð í aðgerðakóðann, sem þarf til að velja færsluauðkenni (PoW-captcha verkefni).

Aðgerðin (eins og restin af föllunum í þessu verkefni) notar lántökutæknina, niðurstaða aðgerðarinnar er að fjármagna greiðslu gjalds fyrir að kalla þessa aðgerð. Þökk sé þessari lausn getur notandi sem er nýbúinn að búa til veski strax unnið með kerfið og þarf ekki að vera gáttaður á því að afla eða taka við eign sem gerir honum kleift að greiða færslugjald.

Niðurstaðan af skráningaraðgerðinni eru tvær skrár:

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

Þetta gerir kleift að leita áfram og afturábak (tilvísun þessa notanda og allar tilvísanir þessa notanda).

Sjóðsaðgerðin er meira sniðmát til að þróa raunverulega virkni. Í birtu formi tekur það alla fjármuni sem fluttir eru með viðskiptunum og dreifir þeim á tilvísunarreikninga á 1., 2., 3. stigi, á „cashback“ reikninginn og „breytinga“ reikninginn (allt sem eftir er við dreifingu á fyrri reikninga kemur hingað).

Cashback er leið til að hvetja notandann til að taka þátt í tilvísunarkerfinu. Hluti þóknunar sem kerfið greiðir í formi „til baka“ getur notandi afturkallað á sama hátt og verðlaun fyrir tilvísanir.

Þegar tilvísunarkerfið er notað ætti að breyta sjóðsaðgerðinni, innbyggt í meginrökfræði snjallreikningsins sem kerfið mun virka á. Til dæmis, ef tilvísunarverðlaun eru greidd fyrir veðmál sem gert er, þá ætti sjóðsaðgerðin að vera innbyggð í rökfræðina þar sem veðmálið er gert (eða önnur markaðgerð er framkvæmd sem verðlaunin eru greidd fyrir). Það eru þrjú stig tilvísunarverðlauna kóðað inn í þennan eiginleika. Ef þú vilt gera fleiri eða færri stig, þá er þetta líka leiðrétt í kóðanum. Verðlaunaprósentan er stillt af stig1-stigi3 föstum, í kóðanum sem það er reiknað sem upphæð * stig / 1000, það er, gildið 1 samsvarar 0,1% (þessu er einnig hægt að breyta í kóðanum).

Aðgerðarkallið breytir stöðu reikningsins og býr einnig til færslur í þeim tilgangi að skrá eyðublaðið:

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

Það er, tími viðskipta er tími blokkarinnar sem hún er staðsett í. Þetta er áreiðanlegra en að nota tímastimpilinn úr viðskiptunum sjálfum, sérstaklega þar sem það er ekki fáanlegt hjá þeim sem hringja.
Úttektaraðgerðin tekur öll uppsöfnuð verðlaun út á reikning notandans. Býr til færslur í skráningarskyni:

# withdraw log: withdraw_user_txid=amount:timestamp

umsókn

Meginhluti forritsins er affiliate.js bókasafnið, sem er brú á milli hlutdeildargagnalíkana og WAVES NODE REST API. Innleiðir rammaóháð abstraktlag (hægt að nota hvaða sem er). Virkar aðgerðir (skrá, afturkalla) gera ráð fyrir að Waves Keeper sé uppsett í kerfinu, bókasafnið sjálft athugar þetta ekki.

Innleiðir aðferðir:

fetchReferralTransactions
fetchWithdrawTransactions
fetchMyBalance
fetchReferrals
fetchReferer
withdraw
register

Virkni aðferðanna er augljós af nöfnum, breytum og skilagögnum er lýst í kóðanum. Skráningaraðgerðin krefst viðbótarathugasemda - hún byrjar vallotu viðskiptaauðkennis þannig að hún byrjar á 123 - þetta er PoW captcha sem lýst er hér að ofan, sem verndar gegn fjöldaskráningum. Aðgerðin finnur færslu með nauðsynlegu auðkenni og undirritar hana síðan í gegnum Waves Keeper.

DEX samstarfsáætlun í boði á GitHub.com.

Heimild: www.habr.com

Bæta við athugasemd