Juhend Ethereumi detsentraliseeritud hääletusrakenduse väljatöötamiseks

Pärast seda, kui kogu krüptoraha turg oli ületanud 700 miljardi dollari suuruse turu ülempiiri, plahvatas krüptoraharuum viimase paari kuu jooksul. Kuid see on alles algus. Kui plokiahelasüsteemid arenevad ja laienevad jätkuvalt, on detsentraliseeritud rakendustega, muidu tuntud kui dApps, üks suurepärane viis sellesse uude ruumi sukeldumiseks ja selle tehnoloogia kasutamiseks.

Ethereumi plokiahela ülekoormatuse poolest kuulus CryptoKitties on suurepärane näide dApp-ist, kombineerides ainuüksi aretatavate ja kogutavate kasside mõisted plokiahelaga. See sensatsiooniline mäng on vaid üks loominguline näide praktiliselt piiramatust arvust võimalustest.

Ehkki pealtnäha väga keerulised, on välja töötatud teatud raamistikud ja tööriistad, et abstraktselt suhelda plokiahelaga ja nutikate lepingutega. Selles blogipostituses tutvun ühe võimalusega detsentraliseeritud hääletamisrakenduse loomiseks Ethereumis. Käin lühidalt üle Ethereumi, kuid selle juhendi täielikuks kasutamiseks peaks teil tõenäoliselt olema sellest arusaamine. Lisaks loodan, et tunnete Javascripti.

Miks teha detsentraliseeritud hääletamise rakendus?

Põhimõtteliselt võimaldab suurepärane detsentraliseeritud rakendus, mis kasutab plokiahelatehnoloogiat, ilma usaldusväärse kolmanda osapooleta teha samu toiminguid nagu täna (näiteks raha ülekandmine). Parimatel dApps-il on konkreetne reaalses maailmas kasutatav juhtum, mis kasutab plokiahela unikaalseid omadusi.

Sisuliselt on plokiahel jagatud, programmeeritav, krüptograafiliselt turvaline ja seetõttu usaldusväärne pearaamat, mida ükski kasutaja ei kontrolli ja mida saab keegi kontrollida. - Klaus Schwab

Ehkki hääletamisrakendus ei pruugi olla tarbijatele suurepärane rakendus, otsustasin seda selle juhendi jaoks kasutada, sest peamised probleemid, mida plokiahel lahendab - läbipaistvus, turvalisus, juurdepääsetavus, kuuldavus - on peamised probleemid, mis vaevavad praegusi demokraatlikke valimisi.

Kuna plokiahel on püsiv rekord jaotatud tehingutest (häältest), saab iga hääle vaieldamatult täpselt jälgida, millal ja kus see juhtus, valija isikut paljastamata. Lisaks ei saa varasemaid hääli muuta, samas kui praegust ei saa häkkida, sest iga tehingut kontrollib iga üksik võrgus olev sõlm. Ja igal ründajal väljaspool või sees peab rekordi muutmiseks olema kontroll 51% sõlmedest.

Isegi kui ründaja suutis selle saavutada, sisestades kasutaja radikaali valesti oma tegelike isikutunnustega kasutajahääled valesti, võivad lõpust hääletamise süsteemid võimaldada valijatel kontrollida, kas nende hääl on süsteemi õigesti sisestatud, muutes süsteemi ülimalt turvaliseks.

Ethereumi põhikomponendid

Ma eeldan, et teil on selle juhendi ülejäänud osas arusaam Blockchainist ja Ethereumist. Siin on selle kohta suurepärane juhend ja ma olen kirjutanud lühikese ülevaate põhikomponentidest, mida tahaksin, et te teaksite.

  1. Nutikad lepingud toimivad taustaloogika ja salvestusruumina. Leping on kirjutatud nutika lepingu keeles Solidity ning see on koodide ja andmete kogu, mis asub Ethereumi plokiahelas konkreetsel aadressil. See on väga sarnane objektile orienteeritud programmeerimise klassiga, kus see sisaldab funktsioone ja olekumuutujaid. Nutikad lepingud koos Blockchainiga on kõigi detsentraliseeritud rakenduste alus. Nad on sarnaselt Blockchainiga muutumatud ja levitatud, mis tähendab, et nende täiendamine on piin, kui nad on juba Ethereumi võrgus. Õnneks on siin mõned võimalused.
  2. Ethereumi virtuaalne masin (EVM) tegeleb kogu Ethereumi võrgu sisemise oleku ja arvutamisega. Mõelge EVM-ile kui sellele massiivsele detsentraliseeritud arvutile, mis sisaldab aadresse, mis on võimelised koodi käivitama, andmeid muutma ja omavahel suhtlema.
  3. Web3.json Javascripti API, mis võimaldab teil suhelda Blockchainiga, sealhulgas teha tehinguid ja helistada nutikatele lepingutele. See API abstraktselt suhtleb Ethereumi klientidega, võimaldades arendajatel keskenduda oma rakenduse sisule. Selleks peab teie brauserisse olema Web3-eksemplar.

Muud meie kasutatavad tööriistad

  1. Trühvelon Ethereumi populaarne testimise arendusraamistik. See sisaldab arenduse plokiahelat, kompileerimis- ja migreerimisskripte, et teie leping Blockchaini juurutada, lepingute testimine ja nii edasi. See muudab arengu lihtsamaks!
  2. Truffle Lepingud on abstraktsioon peal Web3 Javascript API, mis võimaldab teil hõlpsasti ühendada ja suhelda oma Smart Leping.
  3. Metamask toob Ethereumi teie brauserisse. See on brauserilaiend, mis pakub turvalist Web3 eksemplari, mis on seotud teie Ethereumi aadressiga, võimaldades teil kasutada detsentraliseeritud rakendusi. Me ei kasuta selles õpetuses Metamaskit, kuid see on võimalus inimestel teie DAppiga tootmises suhelda. Selle asemel süstime arendamise käigus omaenda Web3 eksemplari. Lisateabe saamiseks vaadake seda linki.

Alustame!

Lihtsuse mõttes ei hakka me tegelikult üles ehitama seda täielikku hääletussüsteemi, mida ma varem kirjeldasin. Selgitamise hõlbustamiseks on see lihtsalt ühe lehega rakendus, kus kasutaja saab sisestada oma isikutunnistuse ja hääletada kandidaadi poolt. Samuti on olemas nupp, mis loeb ja kuvab häälte arvu ühe kandidaadi kohta.

Nii saame fokuseerida tarkade lepingute loomise ja nendega suhtlemise rakenduses. Kogu selle rakenduse lähtekood asub selles hoidlas ja teil peavad olema installitud Node.js ja npm.

Kõigepealt installime Truffle globaalselt.

npm install -g truffle

Trühvli käskude kasutamiseks peate need käivitama olemasolevas projektis.

git clone //github.com/tko22/truffle-webpack-boilerplatecd truffle-webpack-boilerplatenpm install

See hoidla on vaid üks trühvlikarbi skelett, mis on katlakivid või näidisrakendused, mida saate saada ühe käsuga - truffle unbox [box name]. Veebipakiga trühvli kasti ei värskendata uusimate versioonidega ja see sisaldab näidisrakendust. Seega lõin selle repo (see, mis on ülaltoodud juhistes lingitud).

2. Kataloogi struktuur

Teie kataloogistruktuur peaks sisaldama neid:

  • contracts/- kaust, mis hoiab kõiki lepinguid. ÄRGE KUSTUTAMigrations.sol
  • migrations/ - Migratsioonifaile hoidev kaust, mis aitab teil nutikaid lepinguid Blockchaini juurutada.
  • src/ - omab rakenduse HTML / CSS- ja Javascripti faile
  • truffle.js - Trühvli konfiguratsioonifail
  • build/- Te ei näe seda kausta enne, kui olete oma lepingud koostanud. Selles kaustas on ehituskonstruktsioonid, nii et ärge muutke ühtegi neist failidest! Koosta artefaktid kirjeldavad teie lepingu funktsiooni ja arhitektuuri ning annavad trühvlilepingutele ja web3-le teavet selle kohta, kuidas Blockchainis oma nutika lepinguga suhelda.

1. Kirjutage oma nutikad lepingud

Piisab seadistamisest ja sissejuhatusest. Läheme koodi juurde! Kõigepealt kirjutame oma nutika lepingu, mis on kirjutatud usaldusväärsena (teised keeled pole nii populaarsed). See võib tunduda hirmutav, kuid see pole nii.

Mis tahes rakenduse jaoks soovite, et teie nutikad lepingud oleksid võimalikult lihtsad, isegi rumalalt lihtsad. Pidage meeles, et peate maksma iga tehtud arvutuse / tehingu eest ja teie nutikad lepingud jäävad igaveseks Blockchaini . Nii et soovite, et see töötaks ideaalselt - ehk mida keerulisem see on, seda lihtsam on viga teha.

Meie leping sisaldab:

  1. Riigi muutujad - muutujad, mis hoiavad väärtused, mis on püsivalt salvestatud Blockchain. Valijate ja kandidaatide loendi ja arvu hoidmiseks kasutame olekumuutureid.
  2. Funktsioonid - funktsioonid on tarkade lepingute käivitatavad failid. Need on need, mida me kutsume Blockchainiga suhtlemiseks ning neil on nii sisemiselt kui ka väliselt erinev nähtavus. Pidage meeles, et alati, kui soovite muutuja väärtust / olekut muuta, peab toimuma tehing - Etherile maksumus. Võite teha ka callsBlockchaini, mis ei maksa Eterit, sest teie tehtud muudatused hävitatakse (lisateavet selle kohta leiate 3. jaotisest, kui me tegelikult teeme transactionsja calls).
  3. Sündmused - alati, kui sündmust kutsutakse, logitakse sündmusele edastatud väärtus tehingu logisse. See võimaldab Javascripti tagasihelistamisfunktsioonidel või lahendatud lubadustel vaadata teatud väärtust, mille soovite pärast tehingut tagasi anda. Seda seetõttu, et iga kord, kui tehingu sooritate, tagastatakse tehingulogi. Kasutame vastloodud kandidaadi ID logimiseks sündmust, mille kuvame (kontrollige jaotise 3 esimest täpppunkti).
  4. Struktuuritüübid - see on väga sarnane C-struktuuriga. Struktuurid võimaldavad teil hoida mitu muutujat ja on suurepärased mitme atribuudiga asjade jaoks. Candidateson ainult nende nimi ja pidu, kuid võite neile kindlasti lisada rohkem atribuute.
  5. Kaardistused - mõelge nendele nagu hash-kaardid või sõnastikud, kus sellel on võtme-väärtuse paar. Kasutame kahte kaardistust.

On veel paar tüüpi, mida siin pole loetletud, kuid mõned neist on veidi keerulisemad. Need viis hõlmavad paljusid struktuure, mida nutikas leping tavaliselt kasutab. Neid tüüpe on siin põhjalikumalt selgitatud.

Siit leiate viitena nutika lepingu koodi. Pange tähele, et sellele failile tuleks helistada, Voting.solkuid ma soovisin, et Githubi sisul oleks stiil, nii et andsin sellele .jslaiendi. Nagu ka ülejäänud käesolev juhend, esitan ka mina koodis kommentaare, mis selgitavad, mida see teeb, ja selgitan pärast seda suurt pilti, tuues välja teatud hoiatused ja loogika.

Põhimõtteliselt on meil kaks struktuuri (tüübid, mis sisaldavad mitut muutujat), mis kirjeldavad valijat ja kandidaati. Struktuuride abil saame neile määrata mitu atribuuti, näiteks e-posti aadressid, aadressid ja nii edasi.

Valijate ja kandidaatide jälgimiseks panime nad eraldi kaardistustesse, kus nad on täisarvu indekseeritud. Kandidaat või valija register / võti - laseb selle nimetada ID-ks - on funktsioonidele ainus viis neile juurde pääseda .

Samuti jälgime valijate ja kandidaatide arvu, mis aitab meil neid indekseerida. Lisaks ärge unustage 8. rea sündmust, mis logib kandidaadi ID selle lisamisel. Seda sündmust kasutab meie liides, kuna kandidaadi poolt hääletamiseks peame kandidaadi isikut jälgima.

  1. Ma tean, et vastupidiselt sellele, mida ma varem lepingute ülilihtsaks muutmise kohta ütlesin, muutsin selle lepingu veidi keerulisemaks võrreldes selle rakendusega, mida see rakendus tegelikult teeb. Kuid ma tegin seda selleks, et teil oleks sellesse rakendusse hiljem palju lihtsam muudatusi teha ja funktsioone lisada (lisateavet selle lõpus). Kui soovite teha veelgi lihtsama hääletusrakenduse, võib nutileping töötada vähem kui 15 koodireal.
  2. Pange tähele, et olekumuutujad numCandidatesja numVotersneid ei kuulutata avalikeks. Vaikimisi on nende muutujate nähtavus internal, mis tähendab, et neile pääseb otse juurde ainult kehtiva lepingu või tuletatud lepingute abil (ärge muretsege selle pärast, me ei kasuta seda).
  3. Me kasutame 32byteskeelpillidele kasutamise asemel stringtüüp. Meie EVM-i sõnasuurus on 32 baiti, seega on see „optimeeritud” andmete töötlemiseks 32-baidiste tükkidena. (Koostajad, näiteks Solidity, peavad tegema rohkem tööd ja genereerima rohkem baitkoode, kui andmed pole 32 baiti tükkidena, mis toob tegelikult kaasa kõrgemad gaasikulud.)
  4. Kui kasutaja hääletab, luuakse uus Voterstruktuur ja lisatakse kaardistamisele. Teatud kandidaadil olevate häälte lugemiseks peate läbi vaatama kõik valijad ja loendama häälte arvu. Kandidaadid tegutsevad sama käitumisega. Seega hoiavad need kaardistused kõigi kandidaatide ja valijate ajalugu.

2. Instantiate web3 ja lepingud

Kui meie nutikas leping on täidetud, peame nüüd käivitama oma testploki ja juurutama selle lepingu Blockchaini. Vajame ka viisi, kuidas temaga rääkida, mis toimub veebisaidi web3.js kaudu.

Enne testi blokeerimisahelaga alustamist peame looma 2_deploy_contracts.jskausta sisestatud faili, /contractsmis käsib teil migreerimisel lisada teie hääletamise nutikas leping.

Ethereumi plokiahela arenduse alustamiseks minge oma käsureale ja käivitage:

truffle develop

See elab teie käsureal. Kuna Solidity on kompileeritud keel, peame selle EVM-i käivitamiseks kompileerima kõigepealt baitkoodiks.

compile

build/Nüüd peaksite oma kataloogis nägema kausta. Selles kaustas on ehituskonstruktsioonid, mis on Trühvli sisemise töö jaoks kriitilised, nii et ärge puudutage neid!

Järgmisena peame lepingu üle kandma. Migrations on Trühvli skript, mis aitab teil oma arenduse käigus oma rakenduse lepingu olekut muuta. Pidage meeles, et teie leping on paigutatud Blockchaini teatud aadressile, nii et alati, kui teete muudatusi, asub teie leping teisel aadressil. Migratsioonid aitavad teil seda teha ja aitavad ka andmeid teisaldada.

migrate

Palju õnne! Teie nutikas leping on nüüd Blockchainis igavesti. Noh, mitte tegelikult ... sest truffle developvärskendab iga kord, kui selle peatate.

Kui soovite püsivat plokiahelat, kaaluge Ganache'i, mille on välja töötanud ka Truffle. Kui kasutate Ganache'i, pole teil vaja helistada truffle develop. Selle asemel jooksed truffle compileja truffle migrate. Selleks, et mõista, mida on vaja ilma Trühvlita lepingu rakendamiseks, vaadake seda blogipostitust.

Kui oleme nutika lepingu Blockchaini juurutanud, peame iga rakenduse käivitamisel brauseris seadistama brauseris Javascriptiga web3.0 eksemplari. Seega asetatakse järgmine koodijupp koodi lõppu js/app.js. Pange tähele, et kasutame veebiversiooni 3.0 versiooni 0.20.1.

Tegelikult ei pea te liiga palju muretsema, kui te sellest koodist aru ei saa. Lihtsalt teadke, et see käivitatakse rakenduse käivitamisel ja kontrollib, kas teie brauseris on juba Web3-eksemplari (Metamask). Kui seda pole, loome lihtsalt ühe, mis räägib localhost:9545, see on Trühvli arenduse plokiahel.

Kui kasutate Ganache'i, peate porti muutma 7545. Kui eksemplar on loodud, kutsume startfunktsiooni (määratlen selle järgmises osas).

3. Lisage funktsionaalsus

Viimane asi, mida peame tegema, on kirjutada rakenduse liides. See hõlmab kõigi veebirakenduste jaoks hädavajalikke asju - HTML, CSS ja Javascript (Oleme juba natuke kirjutanud Javascriptist koos Web3 eksemplari loomisega). Kõigepealt loome oma HTML-faili.

See on väga lihtne leht, kus on kasutajatunnuse sisendvorm ja nupud hääletamiseks ja häälte lugemiseks. Nuppude klõpsamisel kutsuvad nad üles konkreetsed funktsioonid, mis hääletavad, ja leiavad kandidaatide häälte arvu.

On kolm olulist div elemente küll, ID-dega: candidate-box, msgja vote-box, mis hoiab ruudud iga kandidaadi sõnum ja häälte arvu võrra. Impordime ka JQuery, Bootstrap ja app.js.

Nüüd peame lihtsalt lepinguga suhtlema ja rakendama hääletamise ning iga kandidaadi häälte arvu lugemise funktsioonid. JQuery manipuleerib DOM-iga ja Blockchaini tehingute või kõnede tegemisel kasutame lubadusi. Allpool on koodi kood app.js.

Pange tähele, et ka kood, mille ma eelmises etapis Web3 eksemplari loomiseks esitasin, on siin. Esmalt impordime vajalikud teegid ja veebipakid, sealhulgas Web3 ja Trühvlilepingud. Blokiahelaga suhtlemiseks kasutame trühvlilepinguid, mis on ehitatud web3 peale.

Selle kasutamiseks haarame ülesehituse artefaktid, mis ehitati hääletamise nutika lepingu koostamisel automaatselt, ja kasutame neid trühvlilepingu loomiseks. Lõpuks seadistasime globaalse muutuja funktsioonid windowrakenduse käivitamiseks, kandidaadi poolt hääletamiseks ja häälte arvu leidmiseks.

Blockchainiga reaalseks suhtlemiseks peame deployedfunktsiooni kasutades looma trühvlilepingu eksemplari . See omakorda tagastab lubaduse, mille eksemplar on tagastusväärtus, mida kasutate nutilepingu funktsioonide kutsumiseks.

Nende funktsioonidega suhtlemiseks on kaks võimalust: tehingud ja kõned. Tehing on kirjutamistoiming ja seda edastatakse kogu võrku ning kaevandajad töötlevad (ja seega maksab see Eetrile). Olekumuutuja muutmisel peate tegema tehingu, kuna see muudab plokiahela olekut.

Kõne on lugemisoperatsioon, mis simuleerib tehingut, kuid loobub oleku muutusest. Seega ei lähe see Eetrile maksma. See sobib suurepäraselt getter-funktsioonide helistamiseks (vaadake nelja getter-funktsiooni, mille me varem oma nutilepingus kirjutasime).

Et tehing Truffle Lepingud, siis kirjuta instance.functionName(param1, param2), kus instancenagu näiteks, mis oli tagastatud deployedfunktsioon (Check line 36 näidet). See tehing tagastab lubaduse, mille tagastusväärtusena on toodud tehinguandmed. Seega, kui tagastate nutika lepingu funktsioonis väärtuse, kuid sooritate sama funktsiooniga tehingu, ei tagasta see seda väärtust.

Seetõttu on meil sündmus, mis logib kõik, mida soovite tagastatavate tehinguandmete sisse kirjutada. Ridade 36–37 puhul teeme kandidaadi lisamiseks tehingu. Lubaduse lahendamisel on meil tehinguandmed result.

Et saada candidateID, et me sisse sündmuse AddedCandidate()(kontrollida smart lepingu seda näha 0), me peame minema läbi logide ja taastada selline: result.logs[0].args.candidateID.

Toimuva tõeliseks nägemiseks kasutage Chrome'i arendaja tööriistu, et see välja printida resultja selle struktuur läbi vaadata result.

Helistamiseks kirjutate instance.functionName.call(param1,param2). Kui funktsioonil on märksõna view, loob Trühvli lepingud kõne automaatselt ja seega pole teil vaja seda lisada .call.

Seetõttu on meie getter-funktsioonidel viewmärksõna. Erinevalt tehingu tegemisest on kõne tagastatud lubadusel tagastusväärtus, olenemata sellest, kas nutika lepingu funktsioon tagastab.

Selgitan nüüd kolme funktsiooni lühidalt, kuid see peaks olema väga tuttav, kui olete loonud rakendusi, mis otsivad / muudavad andmeid andmepoest ja manipuleerivad vastavalt DOM-iga. Andmebaasist andmete saamiseks mõelge Blockchainile kui oma andmebaasile ja Trühvli lepingutele kui API-le.

App.start ()

Seda funktsiooni kutsutakse kohe pärast Web3 eksemplari loomist. Trühvlilepingute toimimiseks peame seadma pakkuja loodud Web3 eksemplarile ja määrama vaikeväärtused (nt millist kontot kasutate ja kui palju gaasi soovite tehingu tegemiseks maksta).

Kuna oleme arendusrežiimis, saame kasutada mis tahes kogust gaasi ja mis tahes kontot. Tootmise ajal võtsime MetaMaski pakutava konto ja proovisime välja selgitada väikseima gaasikoguse, mida saaksite kasutada, kuna see on tegelikult päris raha.

Kui kõik on seadistatud, kuvame nüüd iga kandidaadi jaoks märkeruudud, et kasutaja saaks hääletada. Selleks peame looma lepingu eksemplari ja hankima kandidaadi teabe. Kui kandidaate pole, siis loome nad. Selleks, et kasutaja saaks kandidaadi poolt hääletada, peame esitama selle kindla kandidaadi ID. Seega paneme igale märkeruudu elemendile idkandidaadi ID (HTML elemendi atribuut). Lisaks lisame globaalsele muutujale kandidaatide arvu numOfCandidates, mida me kasutame App.findNumOfVotes(). JQuery abil lisatakse iga märkeruut ja selle kandidaadi nimi .candidate-box.

Rakenduse hääletus ()

See funktsioon hääletab kindla kandidaadi poolt, mille põhjal klõpsatakse märkeruudul ja selle idatribuudil.

Esiteks kontrollime, kas kasutaja on sisestanud oma kasutajatunnuse, mis on tema identifikaator. Kui nad seda ei teinud, kuvame teate, milles palutakse neil seda teha.

Teiseks kontrollime, kas kasutaja hääletab kandidaadi poolt, kontrollides, kas klõpsatud on vähemalt üks märkeruut. Kui ühtegi märkeruutu ei klõpsatud, kuvame ka teate, milles palutakse neil kandidaadi poolt hääletada. Kui klõpsatakse ühel märkeruutudest, haarame idselle märkeruudu atribuudi, mis on ka lingitud kandidaadi ID, ja kasutame seda kandidaadi poolt hääletamiseks.

Kui tehing on lõpule viidud, lahendame tagastatud lubaduse ja kuvame teate „Hääletatud”.

App.findNumOfVotes ()

See viimane funktsioon leiab iga kandidaadi häälte arvu ja kuvab need. Vaatame kandidaadid läbi ja kutsume kaks nutikat lepingufunktsiooni getCandidateja totalVotes. Lahendame need lubadused ja loome HTML-elemendi selle kindla kandidaadi jaoks.

Nüüd käivitage rakendus ja näete seda edasi //localhost:8080/!

npm run dev

Ressursid

Ma tean, see on palju ... Teil võib see artikkel olla mõnda aega avatud, kui arendate seda rakendust aeglaselt ja saate tegelikult aru, mis toimub. Aga see on õppimine! Täiendage seda juhendit kogu Ethereumi, Trühvli ja kogu allpool esitatud dokumendiga. Olen püüdnud tabada paljusid selle artikli põhipunkte, kuid see on vaid lühike ülevaade ja need ressursid aitavad palju.

  • Kõik tahkuse ja nutikate lepingute kohta - ma mõtlen kõike
  • Kõik Trühvli kohta
  • Trühvli lepingudokumendid
  • Web3 Javascripti API- seda on tore teada ja viidata, kuid Trühvlilepingud teevad sellest palju osa
  • Kasulikud DAppi mustrid
  • Ethereum Docs - vaadake külgriba ja seal on palju asju
  • CryptoKittiesi koodi selgitus - kirjanik läbib CryptoKittiesi nutika lepingu olulised osad
  • Nutika lepingu parimad tavad- peab lugema

Järeldus

Ethereumi rakenduste loomine on üsna sarnane tavalise rakendusega, mis kutsub taustaprogrammi. Kõige raskem on kirjutada kindel ja täielik nutikas leping. Loodan, et see juhend aitas teil mõista detsentraliseeritud rakenduste ja Ethereumi põhiteadmisi ning aitab teil käivitada huvi nende arendamise vastu.

Kui soovite ehitada sellest, mida oleme loonud, siis siin on mõned ideed. Ma olen tegelikult nutika lepingu kirjutanud nii, et seda saab hõlpsasti rakendada koos kõigega, mis teile selles juhendis on antud.

  • Kuvage iga kandidaadi pidu. Kandidaadi erakonna saame juba kandideerides getCandidate(id).
  • Kontrollige, kas kasutaja sisestatud ID on kordumatu.
  • Küsige ja salvestage Kasutaja kohta lisateavet, näiteks tema sünniaeg ja kodune aadress.
  • Lisage suvand, et näha, kas konkreetse ID-ga isik on hääletanud või mitte. ID-i sisestamiseks loote uue vormi, mille otsite siis plokiahelast selle kindla kasutaja poole.
  • Kirjutage uus nutika lepingu funktsioon, mis loeb MÕLEMA kandidaadi hääled korraga. Praegu peame kahele kandidaadile tegema kaks eraldi kõnet, nõudes, et leping sõlmiks kõik kasutajad kaks korda.
  • Luba uute kandidaatide lisamine. See tähendab uue vormi lisamist kandidaatide lisamiseks, aga ka veidi muutmist selles, kuidas me esiplaanil kandidaate kuvame ja nende poolt hääletame.
  • Nõuda, et kasutajad hääletamiseks omaksid Ethereumi aadressi. Minu loogika kasutajate aadresside lisamata jätmiseks on see, et valijatel pole eeldatavasti Ethereumi selles hääletamisprotsessis osalemist. Kuid paljud DApps nõuavad kasutajatelt Ethereumi aadressi olemasolu.

Siin on ka mõned näpunäited, mis võivad takistada mõningaid takistusi:

  • Kui midagi imelikku juhtub, kontrollige oma nutika lepingu funktsioone kahe- ja kolmekordselt. Veetsin paar tundi vea peal, et aru saada, et tagastasin ühes oma funktsioonis vale väärtuse.
  • Arenduse plokiahelaga ühenduse loomisel kontrollige, kas teie URL ja port on õiged. Pidage meeles: 7545on Ganache jaoks truffle developja 9545on tema jaoks. Need on vaikimisi, nii et kui te ei saa oma plokiahelaga ühendust luua, võite neid muuta.
  • Ma ei käinud sellest üle, sest see juhend oleks olnud liiga pikk ja ma ilmselt teeksin selle kohta veel ühe postituse - aga peaksite oma lepinguid testima! See aitab palju.
  • Kui te pole lubadustega tuttav, vaadake läbi, kuidas need toimivad ja kuidas neid kasutada. Trühvlilepingud kasutavad lubadusi ja lubadusi toetab ka veebi3 beetaversioon. Kui teete neid valesti, võivad nad segada paljusid teie hankitavaid andmeid.

Tervitused detsentraliseeritud ja turvalise Interneti loomise nimel - Web 3.0!

Loodan, et teile meeldis seda juhendit lugeda sama palju kui mulle selle kirjutamist! Kui teil on mõtteid ja kommentaare, jätke julgelt kommentaar allpool või saatke mulle e-kiri aadressil [email protected] või säutsuge (olen hiljuti selle loonud)! Kasutage julgelt minu koodi ja jagage seda oma sõpradega!