Ako pogledamo trendove prethodnih nekoliko godina, o blockchainu smo slušali cijelo vrijeme, ali ne puno 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 pohranu 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 računalnih sustava blockchaina.
To je revolucionarna tehnologija baze podataka koja pokreće praktički sve kriptovalute. Blockchain nevjerojatno otežava hakiranje ili varanje sustava š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 raspon aplikacija.
Kriptovalute i blockchaini posljednjih su godina sve popularniji, a očekuje se da će se taj trend nastaviti.
U ovom vodiču napravit ćemo jednostavan blockchain s JavaScriptom. Pružit će vam osnovno razumijevanje kako blockchain funkcionira.
Nazovimo ga MelodyCoin i krenite odmah u akciju!
Stvaranje bloka
Za početak ćemo izraditi 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.
Stvorite 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 spojiti na ovaj blok može biti uključen u parametar podataka. Ako želite stvoriti kriptovalutu, ovdje možete zadržati podatke o transakciji kao što su pošiljatelj/primatelj 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.
Stvaranje hashova
Svaki blok povezuje se s prethodnim blokom (dakle, svojstvo previousHash). To jest, svaki blok zahtijeva hash. Hash je sličan otisku prsta. Za svaki blok je poseban.
Hash bloka može se 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, JavaScript ne podržava hash SHA256 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 funkciju CalculateHash(), upotrijebimo je u funkciji Block:
Nakon što opišemo kako blok izgleda, možemo definirati kako bi Blockchain trebao izgledati. Pa napravimo novi razred.
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 stvoriti ono što je poznato kao "blok geneze". Ovo je prvi blok u lancu, a jedinstven je po tome što ne može upućivati na prethodni blok (prvi je!).
Dakle, da bih napravio blok geneze, dodat ć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 izgradimo 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 dohvaćanja 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:
Ispitivanje
Pogledajmo kako je naš MelodyCoin izašao.
Stvorite instancu blockchaina da biste to postigli. Dodajmo još par blokova:
Tamo smo napravili dva nova bloka. Pogledajmo kako trenutno izgleda naš blockchain.
MelodyCoin će biti u nizu i formatiran s četiri razmaka:
Provjerite integritet Blockchaina
Blockchaini su fantastični jer nakon što je blok dodan, ne može se mijenjati bez poništavanja ostatka lanca.
Međutim, ne postoji način da provjerim integritet našeg blockchaina ovom implementacijom.
Uvedimo 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.
Pokušajmo sada mijenjati naš blockchain. Izmijenimo blok 2 i prepišemo njegov sadržaj (pretpostavimo da smo prenijeli 100 novčića umjesto četiri).
Kada to izvršimo, možemo vidjeti da softver prepoznaje naš trud da mijenjamo lanac.
Međutim, možete vjerovati da postoji još jedan način da se u to umiješam. Izmijenio sam sadržaj u bloku, ali nisam ponovno izračunao hash. Dakle, možete pokušati biti pametni i ponovno izračunati hash tog istog bloka.
To je sve što je bilo u našoj maloj postavci blockchaina! Omogućuje nam dodavanje novih blokova i otkrivanje petljanja u podatke unutar lanca.
Postoje dva problema s našim malim blockchainom koje moramo riješiti:
- Moderna računala su iznimno brza i mogu dodati tisuće blokova u naš lanac u sekundi. Očito ne želimo da netko šalje neželjenu poštu našem blockchainu.
- Naš blockchain je još uvijek osjetljiv na neovlašteno djelovanje. Možete ažurirati sadržaj bloka, a zatim jednostavno ponovno izračunati hasheve (i prethodne hashove) za sve sljedeće blokove. Čak i ako se petljate s tim, završit ćete s legitimnim lancem.
Kako bi riješili ove probleme, blockchaini koriste tehniku poznatu kao "dokaz rada". Morate pokazati da ste koristili značajnu količinu računskih resursa za stvaranje bloka koristeći ovaj pristup. Ovo se također zove rudarstvo.
Proof-of-work zahtijeva da hash bloka počinje s određenim brojem nula. Ali kako možete znati odgovara li vaš hash ovom pravilu?
Sadržaj bloka određuje njegov hash. Dakle, uvijek dobivamo isti hash, pod uvjetom da ne mijenjamo sadržaj.
Svaki blok bi trebao imati dodanu vrijednost nonce kao rješenje. Ovo su u biti neki nasumični podaci koje možemo ažurirati sve dok hash 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 s uključivanjem nonce u našu klasu Block. Nonce je jedina vrijednost unutar našeg bloka koju možemo modificirati da utječe na hash 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 će se izvoditi sve dok naš hash ne počne s dovoljno nula. Poteškoću koristimo da odredimo koliko je nula 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 ponovno izračunavamo hash. A ako pronađemo hash koji odgovara težini, prijavljujemo ga na konzolu.
Postoji još jedna stvar koju moramo učiniti. Ne uzimamo u obzir varijablu nonce u našoj metodi CalculateHash, pa je ovdje:
Blockchain klasa
Testirajmo ovaj novi pristup u našoj klasi blockchaina i vidimo kako ide.
Za početak, definirat ću težinu našeg blockchaina u funkciji Object(). Ovdje ga definiramo jer ga možemo kasnije koristiti negdje.
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 dokazivanja rada. Ovdje dodajte nekoliko izjava console.log.
Kada izvršimo ovaj kod, možemo primijetiti da proces rudarenja više nije osobito brz.
Algoritmu je potrebno neko vrijeme da generira blokove s hashovima koji počinju s tri nule (kako je konfigurirano prema 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 značajka na blockchainima. A sada kada razumijete kako to funkcionira, nastavite stvarati svoj vlastiti!
Ostavi odgovor