Ako pogledamo trendove prethodnih nekoliko godina, o blockchainu smo slušali cijelo vrijeme, ali ne mnogo o specifičnostima.
Svi smo svjesni da se kriptovalute kao što su Bitcoin, Ethereum, Dogecoin, Matic i druge oslanjaju na blockchain tehnologiju. Blockchain je predvodio značajne događaje koji su revolucionirali brojne industrije 2021. i utrli put novim dostignućima.
Blockchain je sredstvo za pohranjivanje podataka na način koji je teško ili nemoguće urediti, hakirati ili prevariti. To je digitalna knjiga transakcija koje se dupliciraju i šire po cijeloj mreži kompjuterskih sistema blockchaina.
To je revolucionarna tehnologija baze podataka koja pokreće praktički sve kriptovalute. Blockchain nevjerovatno otežava hakovanje ili varanje sistema širenjem identičnih kopija baze podataka po cijeloj mreži.
Iako je Bitcoin sada najistaknutija upotreba za blockchain, tehnologija može poslužiti za vrlo širok spektar aplikacija.
Kriptovalute i blockchains su posljednjih godina sve popularniji, a očekuje se da će se ovaj trend nastaviti.
U ovom vodiču ćemo napraviti jednostavan blockchain sa JavaScript-om. To će vam pružiti osnovno razumijevanje kako blockchain funkcionira.
Nazovimo to MelodyCoin i krenimo odmah u akciju!
Kreiranje bloka
Za početak ćemo kreirati novu JavaScript datoteku u koju ćemo smjestiti sav naš kod.
Nazovimo ga main.js i počnimo s opisom kako bi blockchain i blokovi trebali izgledati.
Kreirajte klasu Block i dajte joj funkciju Object() { [nativni kod] } za početak.
Morate dati datum i hash prethodnog bloka kada kreirate novi blok:
Evo definicija za svako svojstvo:
- Vremenska oznaka pokazuje kada je blok napravljen. Možete koristiti bilo koji format koji odaberete (u ovom slučaju, UNIX vremensku oznaku).
- Bilo koji oblik podataka koji želite da povežete sa ovim blokom može biti uključen u parametar podataka. Ako želite kreirati kriptovalutu, ovdje možete zadržati podatke o transakciji kao što su pošiljatelj/primalac i iznos novca koji je premješten.
- PrethodniHash je niz koji sadrži hash prethodnog bloka. To je ono što će generirati lanac blokova, koji će kasnije biti kritični u osiguravanju integriteta našeg blockchaina.
Kreiranje haševa
Svaki blok se povezuje sa prethodnim blokom (dakle, prethodnim Hash svojstvom). To jest, svaki blok zahtijeva hash. Haš je sličan otisku prsta. Za svaki blok je poseban.
Heš bloka se može izračunati propuštanjem cijelog njegovog sadržaja kroz hash funkciju.
Dakle, počnimo s implementacijom funkcije koja izračunava hash trenutnog bloka.
Dakle, pod klasom Block, definiramo funkciju CalculateHash:
Međutim, SHA256 heš nije podržan od strane JavaScripta i mora se dobiti iz vanjske biblioteke.
Crypto-js je fantastičan paket koji uključuje sigurne implementacije nekoliko hash algoritama.
Zatim ga možemo uvesti u naš main.js kod.
Sada kada imamo našu callHash() funkciju, stavimo je na korištenje u funkciji našeg bloka:
Nakon što opišemo kako blok izgleda, možemo definisati kako bi Blockchain trebao izgledati. Pa hajde da napravimo novu klasu.
U ovom scenariju, blockchain je vrlo jednostavan objekt koji ima lanac svojstava. Ovo je niz koji drži sve blokove u lancu.
Prije nego što možemo dodati blokove, prvo moramo kreirati ono što je poznato kao "blok geneze". Ovo je prvi blok u lancu, a jedinstven je po tome što ne može ukazivati na prethodni blok (prvi je!).
Dakle, da bih napravio genesis blok, dodaću funkciju našoj klasi pod nazivom createGenesisBlock (). Povratak u funkciju Object() { [nativni kod] } naše Blockchain klase.
Sada možemo uključiti genesis blok kad god napravimo novu instancu Blockchaina:
Blockchain metode
Sada, dodajmo metode našoj Blockchain klasi koja će nam omogućiti da radimo stvari poput dodavanja novih blokova i preuzimanja najnovijeg bloka.
Funkcija getLatestBlock je najosnovnija. Jednostavno vraća konačnog člana niza lanca:
Tehnika addBlock je malo više uključena.
Prije nego što možemo dodati novi blok u naš lanac, prvo moramo na odgovarajući način postaviti prethodno Hash polje tog bloka.
Mora biti postavljen na hash posljednjeg dodanog bloka u naš lanac. Također moramo izračunati hash novog bloka:
testiranje
Hajde da vidimo kako je naš MelodyCoin izašao.
Kreirajte instancu blockchaina da biste to postigli. Dodajmo još par blokova:
Tamo smo napravili dva nova bloka. Hajde da zavirimo u to kako trenutno izgleda naš blockchain.
MelodyCoin će biti stringiran i formatiran sa četiri razmaka:
Provjerite integritet Blockchaina
Blockchains su fantastični jer jednom kada je blok dodan, ne može se modificirati bez poništavanja ostatka lanca.
Međutim, ne postoji način da provjerim integritet našeg blockchaina ovom implementacijom.
Hajde da uvedemo isChainValid funkciju u naš blockchain. Ako je lanac legitiman, vratit će se true; u suprotnom će vratiti false:
Testiranje integriteta
Sada možemo staviti na test integritet našeg blockchaina. Ako ga sada izvršimo, to će potvrditi da je naš lanac originalan.
Hajde sada da pokušamo da manipulišemo našim blockchain-om. Izmijenimo blok 2 i prepišemo njegov sadržaj (pretpostavimo da smo prebacili 100 novčića umjesto četiri).
Kada ovo izvršimo, možemo vidjeti da softver prepoznaje naš napor da mijenjamo lanac.
Međutim, možete vjerovati da postoji još jedan način da se miješam u ovo. Izmijenio sam sadržaj u bloku, ali nisam ponovo izračunao heš. Dakle, možete pokušati biti pametni i ponovo izračunati heš tog istog bloka.
To je sve što je bilo u našoj maloj blockchain postavci! Omogućava nam da dodamo nove blokove i otkrijemo neovlašteno mijenjanje podataka unutar lanca.
Postoje dva problema s našim malim blockchainom koje moramo riješiti:
- Moderni računari su izuzetno brzi i mogu dodati hiljade blokova u naš lanac u sekundi. Očigledno ne želimo da neko šalje neželjenu poštu našem blockchainu.
- Naš blockchain je još uvijek podložan neovlaštenom pristupu. Možete ažurirati sadržaj bloka, a zatim jednostavno ponovo izračunati heševe (i prethodne hešove) za sve sljedeće blokove. Čak i ako se petljate s tim, završit ćete s legitimnim lancem.
Kako bi riješili ove probleme, blockchains koriste tehniku poznatu kao "dokaz rada". Morate pokazati da ste koristili značajnu količinu računskih resursa da kreirate blok koristeći ovaj pristup. Ovo se također zove rudarstvo.
Proof-of-work zahtijeva da heš bloka počinje sa određenim brojem nula. Ali kako možete znati da li vaš hash odgovara ovom pravilu?
Sadržaj bloka određuje njegov hash. Tako da uvek dobijamo isti hash, pod uslovom da ne menjamo sadržaj.
Svaki blok bi trebao imati dodanu vrijednost nonce kao rješenje. Ovo su u suštini neki nasumični podaci koje možemo ažurirati sve dok heš našeg bloka ne počne s dovoljno nula. Budući da ne možete promijeniti izlaz hash funkcije, morate testirati mnogo različitih kombinacija i nadati se najboljem.
Uvedite rudarstvo u Blockchain
Počnimo tako što ćemo uključiti nonce u našu klasu Block. Nonce je jedina vrijednost unutar našeg bloka koju možemo modificirati da utječe na heš bloka.
Nismo u mogućnosti promijeniti vremensku oznaku ili podatke.
Zatim, napišimo funkciju mineBlock() koja će izvršiti stvarno rudarenje bloka. Ovoj funkciji će se kao parametar poslati potrebna težina i nastavit će se izvršavati sve dok hash našeg bloka ne počne s dovoljno nula.
Upravo sam napravio osnovnu while petlju koja bi radila sve dok naš heš ne počne s dovoljno nula. Koristimo težinu da odredimo koliko nula je potrebno. Uz poteškoću od 5, naš hash mora početi s 5 nula.
Kada naš hash ne sadrži dovoljno nula, povećavamo nonce za jedan i ponovo izračunavamo hash. A ako pronađemo hash koji odgovara težini, evidentiramo ga na konzoli.
Postoji još jedna stvar koju treba da uradimo. Ne uzimamo u obzir varijablu nonce u našoj metodi CalculateHash, pa je evo:
Blockchain Class
Hajde da testiramo ovaj novi pristup u našoj blockchain klasi i vidimo kako ide.
Za početak, definirat ću težinu našeg blockchaina u funkciji Object(). Ovdje ga definiramo jer ga možemo koristiti negdje kasnije.
Funkcija addBlock se tada mora modificirati tako da minira blok prije nego što ga doda u naš lanac.
Koristite Blockchain
Sada, stavimo naš novi blockchain na korištenje s algoritmom dokaza o radu. Ovdje dodajte nekoliko izjava console.log.
Kada izvršimo ovaj kod, možemo primijetiti da proces rudarenja više nije posebno brz.
Algoritmu je potrebno neko vrijeme da generiše blokove sa hešovima koji počinju sa tri nule (kako je konfigurisano po težini).
Dakle, to je bio kraj naše osnovne postavke blockchaina.
Možemo regulirati koliko brzo se novi blokovi dodaju u naš blockchain zahvaljujući mehanizmu dokazivanja rada.
To je najznačajnija sigurnosna karakteristika na blockchain-u. A sada kada razumete kako to funkcioniše, nastavite da kreirate svoj!
Ostavite odgovor