Ja paskatāmies uz pēdējo gadu tendencēm, tad par blokķēdi esam dzirdējuši visu laiku, bet par specifiku maz.
Mēs visi zinām, ka kriptovalūtas, piemēram, Bitcoin, Ethereum, Dogecoin, Matic un citas, balstās uz blokķēdes tehnoloģiju. Blockchain vadīja nozīmīgos notikumus, kas 2021. gadā radīja revolūciju daudzās nozarēs un pavēra ceļu jauniem sasniegumiem.
Blockchain ir līdzeklis datu glabāšanai tādā veidā, ko ir grūti vai neiespējami rediģēt, uzlauzt vai izkrāpt. Tā ir digitāla darījumu virsgrāmata, kas tiek dublēta un izplatīta visā blokķēdes datorsistēmu tīklā.
Tā ir revolucionāra datu bāzes tehnoloģija, kas nodrošina praktiski visas kriptovalūtas. Blockchain apgrūtina sistēmas uzlauzšanu vai apkrāpšanu, izplatot identiskas datu bāzes kopijas visā tīklā.
Lai gan Bitcoin tagad ir visizplatītākais blokķēdes lietojums, šī tehnoloģija var kalpot ļoti dažādām lietojumprogrammām.
Kriptovalūtas un blokķēdes pēdējos gados kļūst arvien populārākas, un sagaidāms, ka šī tendence turpināsies.
Šajā apmācībā mēs izveidosim vienkāršu blokķēdi ar JavaScript. Tas sniegs jums pamata izpratni par blokķēdes darbību.
Sauksim to par MelodyCoin un nekavējoties iesaistīsimies darbībā!
Bloka izveide
Lai sāktu, mēs izveidosim jaunu JavaScript failu, kurā ievietosim visu mūsu kodu.
Sauksim to par main.js un sāksim ar aprakstu par to, kā vajadzētu izskatīties blokķēdei un blokiem.
Izveidojiet Block klasi un vispirms piešķiriet tai funkciju Object() { [vietējais kods] }.
Veidojot jaunu bloku, ir jānorāda datums un iepriekšējā bloka jaucējvārds:
Šeit ir katra īpašuma definīcijas:
- Laika zīmogs norāda, kad bloks tika izveidots. Varat izmantot jebkuru izvēlēto formātu (šajā gadījumā UNIX laikspiedolu).
- Datu parametrā var iekļaut jebkura veida datus, kurus vēlaties savienot ar šo bloku. Ja vēlaties izveidot kriptovalūtu, šeit varat saglabāt darījumu datus, piemēram, sūtītāju/saņēmēju un pārvietotās naudas summu.
- Iepriekšējais hash ir virkne, kas satur iepriekšējā bloka jaucējkodu. Tas radīs bloku ķēdi, kas vēlāk būs ļoti svarīga, lai nodrošinātu mūsu blokķēdes integritāti.
Hašu izveide
Katrs bloks ir saistīts ar iepriekšējo bloku (tātad iepriekšējo hash rekvizītu). Tas nozīmē, ka katram blokam ir nepieciešams jaukts. Hash ir līdzīgs pirksta nospiedumam. Katram blokam tas ir atšķirīgs.
Bloka jaucējvērtību var aprēķināt, visu tā saturu izlaižot caur jaucējfunkciju.
Tātad, sāksim ar funkcijas ieviešanu, kas aprēķina pašreizējā bloka hash.
Tātad, sadaļā Block mēs definējam funkcijucallHash:
Tomēr JavaScript neatbalsta SHA256 jaucējkodu, un tas ir jāiegūst no ārējas bibliotēkas.
Crypto-js ir fantastiska pakotne, kas ietver drošu vairāku jaukšanas algoritmu ieviešanu.
Pēc tam mēs varam to importēt mūsu main.js kodā.
Tagad, kad mums ir funkcija kalkulētHash(), izmantosim to mūsu bloka funkcijā:
Pēc tam, kad ir aprakstīts, kā bloks izskatās, mēs varam definēt, kā Blockchain vajadzētu izskatīties. Tātad izveidosim jaunu klasi.
Šajā scenārijā blokķēde ir ļoti vienkāršs objekts, kuram ir īpašuma ķēde. Šis ir masīvs, kurā atrodas visi ķēdes bloki.
Lai varētu pievienot blokus, mums vispirms ir jāizveido tā sauktais “ģenēzes bloks”. Šis ir pirmais bloks ķēdē, un tas ir unikāls ar to, ka nevar norādīt uz iepriekšējo bloku (tas ir pirmais!).
Tātad, lai izveidotu ģenēzes bloku, es pievienošu mūsu klasei funkciju CreateGenesisBlock (). Atpakaļ mūsu Blockchain klases funkcijā Object() { [vietējais kods] }.
Tagad mēs varam iekļaut ģenēzes bloku jebkurā laikā, kad veidojam jaunu Blockchain instanci:
Blokķēdes metodes
Tagad pievienosim mūsu Blockchain klasei metodes, kas ļaus mums veikt tādas darbības kā jaunu bloku pievienošana un jaunākā bloka iegūšana.
Funkcija getLatestBlock ir visvienkāršākā. Tas vienkārši atgriež ķēdes masīva pēdējo locekli:
AddBlock tehnika ir nedaudz vairāk iesaistīta.
Pirms mēs varam pievienot jaunu bloku savai ķēdei, mums vispirms ir atbilstoši jāiestata šī bloka iepriekšējais hash lauks.
Tam ir jābūt iestatītam uz mūsu ķēdei nesen pievienotā bloka jaucējvārdu. Mums arī jāaprēķina jaunā bloka jaucējvārds:
Testēšana
Paskatīsimies, kā ir iznācis mūsu MelodyCoin.
Lai to paveiktu, izveidojiet blokķēdes gadījumu. Pievienosim vēl pāris blokus:
Mēs tur esam izveidojuši divus jaunus blokus. Apskatīsim, kā šobrīd izskatās mūsu blokķēde.
MelodyCoin tiks stringificēts un formatēts ar četrām atstarpēm:
Pārbaudiet Blockchain integritāti
Blokķēdes ir fantastiskas, jo, tiklīdz bloks ir pievienots, to nevar modificēt, nepadarot nederīgu atlikušo ķēdes daļu.
Tomēr man nav metodes, kā pārbaudīt mūsu blokķēdes integritāti, izmantojot šo ieviešanu.
Ieviesīsim mūsu blokķēdē funkciju isChainValid. Ja ķēde ir likumīga, tā atgriezīsies patiesa; pretējā gadījumā tas atgriezīsies false:
Integritātes pārbaude
Tagad mēs varam pārbaudīt mūsu blokķēdes integritāti. Ja mēs to izpildīsim tagad, tas apstiprinās, ka mūsu ķēde ir īsta.
Tagad mēģināsim izjaukt mūsu blokķēdi. Mainīsim 2. bloku un pārrakstīsim tā saturu (pieņemsim, ka mēs pārskaitījām 100 monētas, nevis četras).
Kad mēs to izpildām, mēs varam redzēt, ka programmatūra atpazīst mūsu centienus iejaukties ķēdē.
Tomēr jūs varat ticēt, ka man ir cita metode, kā to iejaukties. Es mainīju bloka saturu, bet nepārrēķināju hash. Tātad jūs varat mēģināt būt gudrs un pārrēķināt šī paša bloka jaucējvērtību.
Tas ir viss, kas bija mūsu mazajā blokķēdes iestatījumā! Tas ļauj mums pievienot jaunus blokus un atklāt datu manipulācijas ķēdē.
Ar mūsu mazo blokķēdi ir divas problēmas, kas mums jārisina:
- Mūsdienu datori ir ārkārtīgi ātri un var pievienot tūkstošiem bloku mūsu ķēdei dažu sekunžu laikā. Mēs acīmredzami nevēlamies, lai kāds sūtītu surogātpastu uz mūsu blokķēdi.
- Mūsu blokķēde joprojām ir neaizsargāta pret manipulācijām. Varat atjaunināt bloka saturu un pēc tam vienkārši pārrēķināt jaucējvērtības (un iepriekšējās jaucējzīmes) visiem nākamajiem blokiem. Pat ja jūs to izjauksit, jūs iegūsit likumīgu ķēdi.
Lai risinātu šīs problēmas, blokķēdes izmanto paņēmienu, kas pazīstams kā “darba pierādījums”. Jums jāpierāda, ka izmantojāt ievērojamu daudzumu skaitļošanas resursu, lai izveidotu bloku, izmantojot šo pieeju. To arī sauc kalnrūpniecība.
Darba pierādīšanai ir nepieciešams, lai bloka jauktajam rādītājam jāsākas ar noteiktu skaitu nullēm. Bet kā jūs varat zināt, vai jūsu hash atbilst šim noteikumam?
Bloka saturs nosaka tā jaucējfunkciju. Tādējādi mēs vienmēr iegūstam vienu un to pašu jaucējfunkciju, ja vien nemaina saturu.
Katram blokam kā risinājumam ir jāpievieno nonce vērtība. Šie būtībā ir daži nejauši dati, kurus mēs varam atjaunināt, līdz mūsu bloka jaucējkods sākas ar pietiekami daudz nullēm. Tā kā jūs nevarat mainīt jaucējfunkcijas izvadi, jums ir jāpārbauda daudz dažādu kombināciju un jācer uz labāko.
Iepazīstieties ar kalnrūpniecību ar The Blockchain
Sāksim, iekļaujot nonce mūsu Block klasē. Nonce ir vienīgā vērtība mūsu blokā, ko varam modificēt, lai ietekmētu bloka jaucējkodu.
Mēs nevaram mainīt laikspiedolu vai datus.
Tālāk uzrakstīsim funkciju mineBlock(), kas veiks bloka faktisko ieguvi. Šī funkcija kā parametrs tiks nosūtīta vajadzīgās grūtības pakāpei, un tā turpinās darboties, līdz mūsu bloka jaucējfunkcija sāksies ar pietiekami daudz nullēm.
Es tikko izveidoju pamata while cilpu, kas darbotos, līdz mūsu hash sākas ar pietiekami daudz nullēm. Mēs izmantojam grūtības, lai noteiktu, cik nulles ir vajadzīgas. Ja grūtības pakāpe ir 5, mūsu hash jāsākas ar 5 nullēm.
Ja mūsu hash nesatur pietiekami daudz nulles, mēs paaugstinām nonce par vienu un pārrēķinām jaucējvērtību. Un, ja mēs atrodam sarežģītībai atbilstošu hash, mēs to reģistrējam konsolē.
Ir vēl viena lieta, kas mums jādara. Mēs neņemam vērā mainīgo nonce mūsu aprēķinu hash metodē, tāpēc šeit tas ir:
Blockchain klase
Izmēģināsim šo jauno pieeju mūsu blokķēdes klasē un redzēsim, kā tas notiek.
Lai sāktu, es definēšu mūsu blokķēdes sarežģītību funkcijā Object (). Mēs to definējam šeit, jo varam to izmantot kaut kur vēlāk.
Funkcija addBlock pēc tam ir jāmaina tā, lai tā pirms bloka pievienošanas mūsu ķēdei tiktu mīnēta.
Izmantojiet The Blockchain
Tagad liksim mūsu jauno blokķēdi izmantot ar darba pierādījuma algoritmu. Šeit pievienojiet pāris console.log paziņojumus.
Kad mēs izpildām šo kodu, mēs varam novērot, ka ieguves process vairs nav īpaši ātrs.
Algoritmam ir nepieciešams zināms laiks, lai ģenerētu blokus ar jaucējkodiem, kas sākas ar trim nullēm (kā konfigurēts pēc sarežģītības).
Tātad mūsu pamata blokķēdes iestatīšana beidzās.
Pateicoties darba pārbaudes mehānismam, mēs varam regulēt, cik ātri mūsu blokķēdē tiek pievienoti jauni bloki.
Tas ir nozīmīgākais blokķēdes drošības līdzeklis. Un tagad, kad esat sapratis, kā tas darbojas, sāciet izveidot savu!
Atstāj atbildi