
Nakon što je cijelo tržište kriptovaluta prešlo 700 milijardi dolara tržišne kapitalizacije, prostor kriptovaluta eksplodirao je tijekom ovih posljednjih nekoliko mjeseci. Ali ovo je tek početak. Kako se blockchain sustavi nastavljaju razvijati i povećavati, jedan od sjajnih načina za ulazak u taj novi prostor i iskorištavanje ove tehnologije je s decentraliziranim aplikacijama, inače poznatim kao dApps.
CryptoKitties, poznat po zagušenosti Ethereum Blockchaina, sjajan je primjer dApp-a, koji jedinstveno kombinira koncepte uzgajivih i kolekcionarskih mačaka s blockchainom. Ova senzacionalna igra samo je jedan kreativan primjer iz gotovo neograničenog broja prilika.
Iako su naizgled vrlo složeni, razvijeni su određeni okviri i alati koji apstrahiraju vaše interakcije s blockchainom i pametnim ugovorima. U ovom postu na blogu preći ću na jedan način stvaranja decentralizirane aplikacije za glasanje na Ethereumu. Kratko ću razmotriti Ethereum, ali vjerojatno biste ga trebali razumjeti kako biste ovaj vodič koristili u potpunosti. Uz to, očekujem da znate i Javascript.
Zašto napraviti aplikaciju za decentralizirano glasanje?
U osnovi, sjajna decentralizirana aplikacija koja koristi blockchain tehnologiju omogućuje vam izvršavanje istih radnji kao danas (poput prijenosa novca) bez pouzdane treće strane. Najbolji dApps imaju specifični slučaj stvarnog svijeta koji koristi jedinstvene karakteristike blockchaina.
U osnovi, blockchain je zajednička, programabilna, kriptografski sigurna i stoga pouzdana knjiga koju niti jedan korisnik ne kontrolira i koju bilo tko može pregledati. - Klaus SchwabIako aplikacija za glasanje možda nije sjajna aplikacija za potrošače, odlučio sam je koristiti za ovaj vodič, jer su glavni problemi koje blockchain rješava - transparentnost, sigurnost, dostupnost, čujnost - glavni problemi koji muče trenutne demokratske izbore.
Budući da je blockchain trajna evidencija o transakcijama (glasovima) koje se distribuiraju, svaki se glas nepobitno može pratiti točno do kada i gdje se dogodio bez otkrivanja identiteta birača. Osim toga, prošli glasovi se ne mogu mijenjati, dok se sadašnji ne mogu hakirati, jer svaku transakciju ovjerava svaki pojedini čvor u mreži. A bilo koji vanjski ili unutarnji napadač mora imati kontrolu nad 51% čvorova da bi promijenio zapis.
Čak i ako je napadač to uspio postići dok je pogrešno unosio glasove korisnika sa stvarnim ID-ovima ispod radara, sustav glasanja od kraja do kraja mogao bi omogućiti biračima da provjere je li njihov glas ispravno unesen u sustav, što sustav čini izuzetno sigurnim.
Osnovne komponente Ethereuma
Očekujem da ćete razumjeti Blockchain i Ethereum do kraja ovog vodiča. Evo strašnog vodiča o tome, a napisao sam kratki pregled osnovnih komponenata koje bih želio da znate.
- Pametni ugovori djeluju kao pozadinska logika i pohrana. Ugovor je napisan na Solidity, pametnom ugovornom jeziku, i zbirka je koda i podataka koji se nalaze na određenoj adresi na Ethereum blockchainu. Vrlo je slična klasi u objektno orijentiranom programiranju, gdje uključuje funkcije i varijable stanja. Pametni ugovori, zajedno s Blockchainom, osnova su svih decentraliziranih aplikacija. Oni su, poput Blockchaina, nepromjenjivi i distribuirani, što znači da će ih nadogradnja mučiti ako su već na mreži Ethereum. Srećom, evo nekoliko načina kako to učiniti.
- Virtualni stroj Ethereum (EVM) upravlja unutarnjim stanjem i izračunavanjem cijele mreže Ethereum. Zamislite EVM kao ovo masivno decentralizirano računalo koje sadrži "adrese" koje mogu izvršavati kod, mijenjati podatke i međusobno komunicirati.
- Web3.jsje Javascript API koji vam omogućuje interakciju s Blockchainom, uključujući obavljanje transakcija i pozive na pametne ugovore. Ovaj API apstrahira komunikaciju s klijentima Ethereuma, omogućavajući programerima da se usredotoče na sadržaj njihove aplikacije. Da biste to učinili, u vaš preglednik mora biti ugrađena instanca web3.
Ostali alati koje ćemo koristiti
- Tartufje popularan razvojni okvir za testiranje za Ethereum. Uključuje razvojni blockchain, skripte za kompilaciju i migraciju za postavljanje vašeg ugovora na Blockchain, testiranje ugovora i tako dalje. Olakšava razvoj!
- Ugovori o tartufima su apstrakcija na vrhu Web3 Javascript API-ja, koja vam omogućuje jednostavno povezivanje i interakciju sa vašim pametnim ugovorom.
- Metamask donosi Ethereum u vaš preglednik. To je proširenje preglednika koje pruža sigurnu web3 instancu povezanu s vašom Ethereum adresom, omogućujući vam upotrebu decentraliziranih aplikacija. U ovom uputstvu nećemo koristiti Metamask, ali to je način na koji ljudi mogu komunicirati s vašim DAppom u proizvodnji. Umjesto toga, ubrizgat ćemo vlastiti web3 primjer tijekom razvoja. Za više informacija pogledajte ovu poveznicu.
Počnimo!
Radi jednostavnosti, zapravo nećemo graditi cjeloviti sustav glasanja koji sam ranije opisao. Radi lakšeg objašnjenja, to će biti samo aplikacija na jednoj stranici u koju korisnik može unijeti svoju osobnu iskaznicu i glasati za kandidata. Tu će biti i gumb koji broji i prikazuje broj glasova po kandidatu.
Na taj ćemo način moći usmjeriti postupak stvaranja i interakcije s pametnim ugovorima unutar aplikacije. Izvorni kod za cijelu ovu aplikaciju nalazit će se u ovom spremištu, a morat ćete instalirati Node.js i npm.
Prvo, instalirajmo Truffle globalno.
npm install -g truffle
Da biste koristili naredbe tartufa, morate ih pokrenuti u postojećem projektu.
git clone //github.com/tko22/truffle-webpack-boilerplatecd truffle-webpack-boilerplatenpm install
Ovo spremište samo je kostur kutije s tartufima, koji su kotlovi ili primjeri aplikacija koje možete dobiti u jednoj naredbi - truffle unbox [box name]
. Međutim, okvir s tartufom s webpackom nije ažuriran najnovijim verzijama i uključuje primjer aplikacije. Stoga sam kreirao ovaj repo (onaj povezan u gornjim uputama).
2. Struktura direktorija
Struktura vašeg direktorija trebala bi sadržavati sljedeće:
contracts/
- Mapa koja sadrži sve ugovore. NE BRISATIMigrations.sol
migrations/
- Mapa koja sadrži datoteke za migraciju koje vam pomažu da svoje pametne ugovore implementirate u Blockchain.src/
- sadrži datoteke HTML / CSS i Javascript za aplikacijutruffle.js
- Konfiguracijska datoteka tartufabuild/
- Nećete vidjeti ovu mapu dok ne sastavite svoje ugovore. Ova mapa sadrži artefakte gradnje, zato nemojte mijenjati nijednu od ovih datoteka! Artefakti izrade opisuju funkciju i arhitekturu vašeg ugovora i daju ugovore o tartufima i web3 informacije o tome kako stupiti u interakciju s vašim pametnim ugovorom u Blockchainu.
1. Napišite svoje pametne ugovore
Dosta s postavljanjem i uvođenjem. Krenimo u kod! Prvo ćemo napisati naš pametni ugovor koji je napisan u Solidity (ostali jezici nisu toliko popularni). Možda se čini zastrašujuće, ali nije.
Za bilo koju aplikaciju želite da vaši pametni ugovori budu što jednostavniji, čak i glupo jednostavni. Ne zaboravite da morate platiti za svaku izračunu / transakciju koju napravite i vaši će pametni ugovori zauvijek biti na Blockchainu . Dakle, stvarno želite da savršeno funkcionira –– što znači, što je složenije, lakše je pogriješiti.
Naš ugovor uključuje:
- Varijable stanja - varijable koje sadrže vrijednosti koje su trajno pohranjene na Blockchainu. Koristit ćemo varijable stanja za popis i broj glasača i kandidata.
- Funkcije - funkcije su izvršne datoteke pametnih ugovora. Oni su ono što ćemo nazvati za interakciju s Blockchainom, a imaju različite razine vidljivosti, iznutra i izvana. Imajte na umu da kad god želite promijeniti vrijednost / stanje varijable, mora se dogoditi transakcija - koja košta Eter. Također možete izvršiti
calls
Blockchain, koji neće koštati nijedan Eter, jer će promjene koje ste napravili biti uništene (više o tome u odjeljku 3 kada zapravo napravimotransactions
icalls
). - Događaji - Kad god se događaj pozove, vrijednost proslijeđena u događaj zapisat će se u dnevnik transakcije. To omogućuje Javascript funkcijama povratnog poziva ili razriješenim obećanjima prikaz određene vrijednosti koju ste željeli proslijediti nakon transakcije. To je zato što će se svaki put kada izvršite transakciju vraćati dnevnik transakcija. Upotrijebit ćemo događaj za bilježenje ID-a novostvorenog kandidata, koji ćemo prikazati (provjerite prvu točku odjeljka 3).
- Vrste konstrukcija - Ovo je vrlo slično strukturi C. Strukture omogućuju zadržavanje više varijabli i izvrsne su za stvari s više atributa.
Candidates
imat će samo svoje ime i zabavu, ali svakako im možete dodati više atributa. - Mapiranja - Razmislite o ovima poput hash-karata ili rječnika, gdje ima par ključ / vrijednost. Koristit ćemo dva preslikavanja.
Postoji još nekoliko vrsta koje ovdje nisu navedene, ali neke su malo složenije. Ovih pet obuhvaća mnoge strukture koje će se pametnim ugovorom uglavnom koristiti. Ove su vrste ovdje detaljnije objašnjene.
Za referencu, ovdje je kod pametnog ugovora. Imajte na umu da bi ovu datoteku trebalo pozvati, Voting.sol
ali želio sam da Github suština ima stil, pa sam joj dao .js
proširenje. Kao i ostatak ovog vodiča, pružit ću komentare unutar koda koji će objasniti što radi, a kasnije ću objasniti veliku sliku ukazujući na neka upozorenja i logiku.
U osnovi, imamo dvije strukture (vrste koje sadrže više varijabli) koje opisuju birača i kandidata. Pomoću Struktura možemo im dodijeliti više svojstava, kao što su e-adrese, adrese itd.
Da bismo pratili birače i kandidate, stavili smo ih u zasebna preslikavanja gdje su indeksirani cijelim brojevima. Indeks / ključ kandidata ili birača - nazovimo ga ID - jedini je način da im funkcije pristupe .
Također pratimo broj birača i kandidata, što će nam pomoći da ih indeksiramo. Uz to, ne zaboravite na događaj u retku 8, koji će prijaviti ID kandidata kad se doda. Ovo će sučelje koristiti naše sučelje, jer moramo pratiti osobnu iskaznicu kandidata da bismo mogli glasati za kandidata.
- Znam, suprotno onome što sam ranije rekao o super jednostavnim ugovorima, učinio sam ovaj ugovor malo složenijim u odnosu na ono što ova aplikacija zapravo radi. Međutim, učinio sam to kako bi vam bilo puno lakše uređivati i dodavati značajke u ovu aplikaciju (više o tome na kraju). Ako želite napraviti još jednostavniju aplikaciju za glasanje, pametni ugovor mogao bi raditi u manje od 15 redaka koda.
- Imajte na umu da varijable stanja
numCandidates
inumVoters
nisu proglašene javnim. Prema zadanim postavkama ove varijable imaju vidljivostinternal
, što znači da im se može izravno pristupiti samo trenutnim ugovorom ili izvedenim ugovorima (ne brinite zbog toga, nećemo ga koristiti). - Mi koristimo
32bytes
za nizove umjesto da koristimostring
tip. Naš EVM ima veličinu riječi od 32 bajta, pa je "optimiziran" za obradu podataka u dijelovima od 32 bajta. (Prevoditelji, poput Solidity, moraju obaviti više posla i generirati više bajtkoda kad podataka nema u komadima od 32 bajta, što učinkovito dovodi do većih troškova plina.) - Kad korisnik glasa,
Voter
kreira se nova struktura koja se dodaje u mapiranje. Da biste prebrojali broj glasova koji ima određeni kandidat, morate proći kroz sve birače i prebrojati broj glasova. Kandidati djeluju na isto ponašanje. Stoga će ova mapiranja sadržavati povijest svih kandidata i birača.
2. Instancirajte web3 i ugovore
Nakon završetka našeg pametnog ugovora, sada moramo pokrenuti naš testni blockchain i rasporediti ovaj ugovor na Blockchain. Trebat će nam i način za razgovor s njim, koji će biti putem web3.js.
Prije nego što započnemo testni blockchain, moramo stvoriti datoteku koja se zove 2_deploy_contracts.js
unutar mape /contracts
koja joj govori da uključuje vaš pametni ugovor o glasovanju kada migrirate.
Da biste pokrenuli razvojni Ethereum blockchain, idite na naredbeni redak i pokrenite:
truffle develop
Ovo će živjeti na vašem naredbenom retku. Budući da je Solidity kompajlirani jezik, prvo ga moramo kompajlirati u bytecode da bi se EVM izvršio.
compile
Sad biste trebali vidjeti build/
mapu u svom direktoriju. Ova mapa sadrži artefakte izrade, koji su presudni za unutarnji rad Tartufa, zato ih ne dirajte!
Dalje, moramo migrirati ugovor. Migracije je skripta tartufa koja vam pomaže mijenjati stanje ugovora vaše aplikacije tijekom razvoja. Ne zaboravite da je vaš ugovor postavljen na određenu adresu na Blockchainu, pa će se svaki put kada napravite promjene vaš ugovor nalaziti na drugoj adresi. Migracije vam pomažu u tome, a također vam pomažu u premještanju podataka.
migrate
Čestitamo! Vaš je pametni ugovor sada zauvijek na Blockchainu. Pa, ne baš ... jer truffle develop
osvježava svaki put kad ga zaustavite.
Ako želite imati trajni blockchain, razmislite o Ganacheu, koji je također razvio Truffle. Ako upotrebljavate Ganache, nećete trebati zvati truffle develop
. Umjesto toga, trčat ćete truffle compile
i truffle migrate
. Da biste razumjeli što je stvarno potrebno za razmještanje ugovora bez tartufa, pogledajte ovaj post na blogu.
Nakon što smo rasporedili pametni ugovor na Blockchain, morat ćemo postaviti web3.0 instancu s Javascriptom u preglednik kad god se aplikacija pokrene. Tako će se sljedeći komad koda smjestiti na dno js/app.js
. Primijetimo da koristimo web3.0 verzije 0.20.1.
Ne morate se previše brinuti ako ne razumijete ovaj kod. Samo znajte da će se to pokrenuti kad se aplikacija pokrene i provjerit će postoji li u vašem pregledniku web3 instanca (Metamaska). Ako nema, samo ćemo stvoriti onaj s kojim razgovaramo localhost:9545
, a to je Blockchain za razvoj tartufa.
Ako koristite Ganache, morate promijeniti port u 7545
. Jednom kada se stvori instanca, pozvat ćemo start
funkciju (definirat ću je u sljedećem odjeljku).
3. Dodajte funkcionalnost
Posljednje što ćemo morati napraviti je napisati sučelje za aplikaciju. To uključuje osnove bilo koje web aplikacije - HTML, CSS i Javascript (Već smo napisali malo Javascripta s izradom web3 instance). Prvo, kreirajmo našu HTML datoteku.
Ovo je vrlo jednostavna stranica s obrascem za unos korisničkog ID-a i gumbima za glasanje i brojanje glasova. Kad se pritisnu ti gumbi, pozvat će određene funkcije koje glasaju i pronaći će broj glasova za kandidate.
Tri su bitne elemente div ipak, uz ids: candidate-box
, msg
i vote-box
koji će sadržavati okvire za svakog kandidata, poruka i broj glasova, odnosno. Također uvozimo JQuery, Bootstrap i app.js
.
Sada samo trebamo stupiti u interakciju s Ugovorom i primijeniti funkcije za glasanje i prebrojavanje broja glasova za svakog kandidata. JQuery će manipulirati DOM-om, a mi ćemo koristiti Promises dok vršimo transakcije ili pozive na Blockchain. Ispod je kod za app.js
.
Imajte na umu da je ovdje i kod koji sam dao u prethodnom koraku za stvaranje instance web3. Prvo uvozimo potrebne knjižnice i stvari s webpackom, uključujući web3 i ugovore o tartufima. Koristit ćemo ugovore o tartufima koji su izgrađeni na vrhu web3 za interakciju s Blockchainom.
Da bismo ga koristili, ugrabit ćemo artefakte izrade koji su automatski izrađeni kada smo sastavili pametni ugovor s glasanjem i koristiti ih za stvaranje Ugovora o tartufu. Napokon, postavili smo funkcije u globalnoj varijabli window
za pokretanje aplikacije, glasovanje za kandidata i pronalaženje broja glasova.
Da bismo zapravo stupili u interakciju s Blockchainom, moramo stvoriti primjerak Ugovora o tartufu pomoću deployed
funkcije. To će zauzvrat vratiti obećanje s instancom kao povratnu vrijednost koju ćete koristiti za pozivanje funkcija iz pametnog ugovora.
Postoje dva načina interakcije s tim funkcijama: transakcije i pozivi. Transakcija je operacija upisa, a ona će se emitirati na cijelu mrežu i obrađivati je od strane rudara (a time i troškova Etera). Morate izvršiti transakciju ako mijenjate varijablu stanja, jer će ona promijeniti stanje blockchaina.
Poziv je operacija čitanja, koja simulira transakciju, ali odbacuje promjenu stanja. Dakle, to neće koštati Ether. Ovo je izvrsno za pozivanje getter funkcija (pogledajte četiri getter funkcije koje smo prethodno napisali u našem pametnom ugovoru).
Da biste izvršili transakciju s ugovorima o tartufima, pišete instance.functionName(param1, param2)
s instance
primjerkom koji je deployed
funkcija vratila (primjer provjerite u retku 36). Ova će transakcija vratiti obećanje s podacima o transakciji kao povratnom vrijednošću. Dakle, ako vratite vrijednost u svojoj funkciji pametnog ugovora, ali izvršite transakciju s tom istom funkcijom, ona neće vratiti tu vrijednost.
Zbog toga imamo događaj koji će zapisati sve što želite da upiše u podatke o transakciji koji će se vratiti. U slučaju redaka 36–37, izvršavamo transakciju za dodavanje kandidata. Kada riješimo obećanje, imamo podatke o transakciji result
.
Da biste dobili candidateID
što smo prijavljeni u slučaju AddedCandidate()
(provjerite pametne ugovor za 0 vidjeti), moramo proći kroz dnevnike i dohvatiti ga ovako: result.logs[0].args.candidateID
.
Da biste doista vidjeli što se događa, upotrijebite alate za programere Chrome kako biste ispisali result
i pogledali njegovu strukturu result
.
Da biste uputili poziv, napisat ćete instance.functionName.call(param1,param2)
. Međutim, ako funkcija ima ključnu riječ view
, tada će Ugovori o tartufima automatski stvoriti poziv i stoga ne morate dodavati .call
.
To je razlog zašto naše funkcije dobivača imaju view
ključnu riječ. Za razliku od izvršavanja transakcije, vraćeno obećanje poziva imat će povratnu vrijednost onoga što vrati funkcija pametnog ugovora.
Sada ću vam ukratko objasniti 3 funkcije, ali ovo bi vam trebalo biti vrlo poznato ako ste izgradili aplikacije za dohvaćanje / promjenu podataka iz spremišta podataka i manipulaciju DOM-om u skladu s tim. Zamislite Blockchain kao svoju bazu podataka, a Ugovori o tartufima kao API za dobivanje podataka iz vaše baze podataka.
App.start ()
Ova se funkcija poziva odmah nakon što stvorimo instancu web3. Da bi ugovori o tartufima funkcionirali, moramo postaviti davatelja usluga na stvorenu web3 instancu i postaviti zadane vrijednosti (poput računa koji koristite i količine plina koju želite platiti za obavljanje transakcije).
Budući da smo u razvojnom načinu, možemo koristiti bilo koju količinu plina i bilo koji račun. Tijekom proizvodnje uzeli bismo račun MetaMaska i pokušali dokučiti najmanju količinu plina koju biste mogli upotrijebiti, jer je to zapravo stvarni novac.
Nakon što je sve postavljeno, sada ćemo prikazivati potvrdne okvire za svakog kandidata za korisnika da glasa. Da bismo to učinili, moramo stvoriti primjerak ugovora i dobiti podatke o kandidatu. Ako nema kandidata, mi ćemo ih stvoriti. Da bi korisnik mogao glasati za kandidata, moramo dostaviti ID tog određenog kandidata. Dakle, činimo da svaki element potvrdnog okvira ima id
(atribut HTML elementa) ID-a kandidata. Uz to, globalnoj ćemo varijabli dodati broj kandidata u numOfCandidates
kojem ćemo se koristiti App.findNumOfVotes()
. JQuery se koristi za dodavanje svakog potvrdnog okvira i imena njegovog kandidata .candidate-box
.
App.vote ()
Ova će funkcija glasati za određenog kandidata na temelju kojeg se klikne na potvrdni okvir i njegovog id
atributa.
Prvo ćemo provjeriti je li korisnik unio svoj userID, što je njegova identifikacija. Ako nisu, prikazat ćemo poruku koja im govori da to učine.
Drugo, provjerit ćemo glasa li korisnik za kandidata, provjeravajući postoji li barem jedan potvrdni okvir na koji je kliknuto. Ako nijedan od potvrdnih okvira nije kliknut, također ćemo prikazati poruku koja im govori da glasaju za kandidata. Ako se klikne na jedan od potvrdnih okvira, ugrabit ćemo id
atribut tog potvrdnog okvira, koji je ujedno i povezani ID kandidata, i pomoću njega glasovati za kandidata.
Nakon što je transakcija dovršena, razriješit ćemo vraćeno obećanje i prikazati poruku "Glasovalo".
App.findNumOfVotes ()
Ova zadnja funkcija pronaći će broj glasova za svakog kandidata i prikazati ih. Proći ćemo kroz kandidate i pozvati dvije funkcije pametnog ugovora, getCandidate
i totalVotes
. Riješit ćemo ta obećanja i stvoriti HTML element za tog određenog kandidata.
Sada pokrenite aplikaciju i vidjet ćete je na //localhost:8080/
!
npm run dev
Resursi
Znam, puno je ... Možda ćete ovaj članak otvoriti neko vrijeme dok polako razvijate ovu aplikaciju i stvarno razumijete što se događa. Ali to je učenje! Molimo vas da ovaj vodič dopunite svom dokumentacijom iz Ethereuma, Tartufa i onim što sam naveo u nastavku. Pokušao sam postići mnoge ključne točke u ovom članku, ali to je samo kratki pregled i ovi će resursi puno pomoći.
- Sve o solidnosti i pametnim ugovorima - mislim na sve
- Sve o tartufu
- Dokumenti o ugovorima o tartufima
- API za Javascript Web3- ovo će biti sjajno znati i upozoriti, ali ugovori o tartufima apstrahiraju mnoge dijelove ovoga
- Korisni DApp uzorci
- Ethereum Docs - pogledajte bočnu traku i ima puno stvari
- Objašnjenje koda CryptoKitties - Pisac prolazi kroz važne dijelove pametnog ugovora CryptoKitties
- Najbolji postupci za pametni ugovor- obavezno pročitati
Zaključak
Izgradnja aplikacija na Ethereumu prilično je slična uobičajenoj aplikaciji koja poziva pozadinsku uslugu. Najteže je napisati robustan i cjelovit pametni ugovor. Nadam se da vam je ovaj vodič pomogao da razumijete osnovno znanje o decentraliziranim aplikacijama i Ethereumu i da će vam pomoći da pokrenete svoj interes za njihov razvoj.
Ako želite nadograditi ono što smo izgradili, evo nekoliko ideja. Zapravo sam napisao pametni ugovor na takav način da se lako implementira sa svime što sam vam dao u ovom vodiču.
- Prikažite stranku svakog kandidata. Već kandidiramo stranku kandidata
getCandidate(id)
. - Provjerite je li korisnički unijeti ID jedinstven.
- Pitajte i pohranite više informacija o korisniku, kao što su datum rođenja i kućna adresa.
- Dodajte opciju da biste vidjeli je li osoba s određenim ID-om glasala ili nije. Stvorili biste novi obrazac za unos u ID koji biste zatim pretražili za tog određenog korisnika u blockchainu.
- Napišite novu funkciju pametnog ugovora koja broji glasove za OBA kandidata odjednom. Trenutno moramo uputiti dva odvojena poziva za dva kandidata, što zahtijeva da ugovor dva puta prođe kroz sve korisnike.
- Dopustite dodavanje novih kandidata. To znači dodati novi obrazac za dodavanje kandidata, ali i malo se promijeniti u načinu na koji prikazujemo i glasamo za kandidate u frontendu.
- Zahtijevajte od korisnika da imaju Ethereum adresu za glasanje. Moja logika da ne uključujem adrese korisnika je zato što se od glasača ne bi očekivalo da Ethereum sudjeluje u ovom procesu glasanja. Međutim, mnogi DApps zahtijevat će od korisnika Ethereum adresu.
Evo i nekoliko savjeta koji bi mogli spriječiti da se pojave neke prepreke:
- Dvostruko i trostruko provjerite funkcije pametnog ugovora kada se nešto čudno događa. Proveo sam nekoliko sati na grešci kako bih shvatio da sam vratio pogrešnu vrijednost u jednoj od svojih funkcija.
- Provjerite jesu li URL i port točni kada se povežete s razvojnim blockchainom. Zapamtite:
7545
je zatruffle develop
i9545
jest za Ganachea. To su zadane vrijednosti, pa ako se ne možete povezati sa svojim blockchainom, možda ste ih promijenili. - Nisam to prešao jer bi ovaj vodič bio predug i vjerojatno ću objaviti još jedan post o tome - ali trebali biste testirati svoje ugovore! Puno će pomoći.
- Ako vam obećanja nisu poznata, proučite kako funkcioniraju i kako ih koristiti. Truffle Contracts koristi obećanja, a beta za web3 također će podržati obećanja. Ako im pogriješite, mogu zabrljati puno podataka koje dohvaćate.
Živjeli rad na decentraliziranom i sigurnom Internetu - Web 3.0!
Nadam se da ste uživali u čitanju ovog vodiča koliko i ja u njegovu pisanju! Ako imate bilo kakvih misli i komentara, slobodno ostavite komentar ispod ili mi pošaljite e-poštu na [email protected] ili mi tweetujte (nedavno sam ga stvorio)! Slobodno koristite moj kod i podijelite ga sa svojim prijateljima!