Kui vaadata paari eelneva aasta trende, siis plokiahelast oleme kogu aeg kuulnud, aga spetsiifikast vähe.
Me kõik teame, et krüptovaluutad nagu Bitcoin, Ethereum, Dogecoin, Matic ja teised toetuvad plokiahela tehnoloogiale. Blockchain juhtis olulisi sündmusi, mis muutsid 2021. aastal pöörde paljudes tööstusharudes ja sillutasid teed uutele saavutustele.
Blockchain on vahend andmete salvestamiseks viisil, mida on raske või võimatu redigeerida, häkkida või petta. See on digitaalne tehingute pearaamat, mis on dubleeritud ja levinud üle kogu plokiahela arvutisüsteemide võrgu.
See on murranguline andmebaasitehnoloogia, mis toidab praktiliselt kõiki krüptovaluutasid. Blockchain muudab süsteemi häkkimise või petmise uskumatult keeruliseks, levitades andmebaasi identseid koopiaid kogu võrgus.
Kuigi Bitcoin on praegu plokiahela jaoks kõige silmapaistvam kasutusala, võib see tehnoloogia teenindada väga erinevaid rakendusi.
Krüptovaluutad ja plokiahelad on viimastel aastatel muutunud üha populaarsemaks ning see trend peaks jätkuma.
Selles õpetuses loome JavaScriptiga lihtsa plokiahela. See annab teile põhiteadmised plokiahela toimimisest.
Nimetagem seda MelodyCoiniks ja asume kohe tegevusse!
Bloki loomine
Alustuseks loome uue JavaScripti faili, kuhu paigutame kogu oma koodi.
Nimetagem seda nimega main.js ja alustame kirjeldusega, kuidas plokiahel ja plokid peaksid välja nägema.
Looge Block klass ja andke sellele alustuseks funktsioon Object() { [native code] }.
Uue ploki loomisel peate andma kuupäeva ja eelmise ploki räsi:
Siin on iga atribuudi määratlused:
- Ajatempel näitab, millal plokk tehti. Võite kasutada mis tahes valitud vormingut (antud juhul UNIX-i ajatemplit).
- Andmeparameetrisse saab lisada mis tahes andmeid, mida soovite selle plokiga ühendada. Kui soovite luua krüptovaluutat, saate siin hoida tehinguandmeid, nagu saatja/vastuvõtja ja liigutatud rahasumma.
- Eelmine räsi on string, mis sisaldab eelmise ploki räsi. See loob plokkide ahela, mis on hiljem meie plokiahela terviklikkuse tagamisel kriitiline.
Räsi loomine
Iga plokk lingib eelmise plokiga (seega eelmine hashi omadus). See tähendab, et iga plokk nõuab räsi. Räsi on sarnane sõrmejäljega. See on iga ploki jaoks erinev.
Ploki räsi saab arvutada, viies kogu selle sisu läbi räsifunktsiooni.
Niisiis, alustame funktsiooni rakendamisega, mis arvutab praeguse ploki räsi.
Seega määratleme klassis Block all funktsiooni arvutadaHash:
Kuid JavaScript ei toeta SHA256 räsi ja see tuleb hankida välisest teegist.
Crypto-js on fantastiline pakett, mis sisaldab mitmete räsialgoritmide turvalisi rakendusi.
Seejärel saame selle importida oma main.js-koodi.
Nüüd, kui meil on funktsioon arvutadaHash(), kasutame seda funktsioonis Block:
Pärast ploki väljanägemise kirjeldamist saame määratleda, milline peaks plokiahel välja nägema. Loome siis uue klassi.
Selle stsenaariumi korral on plokiahel väga lihtne objekt, millel on omadusahel. See on massiiv, mis hoiab kõiki ahela plokke.
Enne plokkide lisamist peame esmalt looma nn geneesiploki. See on ahela esimene plokk ja see on ainulaadne selle poolest, et see ei saa osutada eelnevale plokile (see on esimene!).
Niisiis, geneesiploki koostamiseks lisan meie klassi funktsiooni CreateGenesisBlock (). Tagasi meie Blockchaini klassi funktsiooni Object() { [native code] }.
Nüüd saame lisada geneesiploki igal ajal, kui loome uue Blockchaini eksemplari:
Plokiahela meetodid
Nüüd lisame oma Blockchaini klassi meetodid, mis võimaldavad meil teha näiteks uusi plokke ja tuua uusim plokk.
Funktsioon getLatestBlock on kõige elementaarsem. See lihtsalt tagastab ahela massiivi viimase liikme:
AddBlocki tehnika on veidi rohkem kaasatud.
Enne kui saame oma ahelasse uue ploki lisada, peame esmalt õigesti seadistama selle ploki eelmise räsivälja.
See peab olema seatud meie ahelasse viimati lisatud ploki räsi. Samuti peame arvutama uue ploki räsi:
Testimine
Vaatame, kuidas meie MelodyCoin on välja tulnud.
Selle saavutamiseks looge plokiahela eksemplar. Lisame veel paar plokki:
Tegime sinna kaks uut plokki. Heidame pilgu sellele, kuidas meie plokiahel praegu välja näeb.
MelodyCoin stringitakse ja vormindatakse nelja tühikuga:
Kontrollige Blockchaini terviklikkust
Plokiahelad on fantastilised, sest kui plokk on lisatud, ei saa seda muuta ilma ülejäänud ahela kehtetuks muutmata.
Siiski pole mul ühtegi meetodit, mille abil saaksin selle teostusega kontrollida meie plokiahela terviklikkust.
Tutvustame oma plokiahelas funktsiooni isChainValid. Kui kett on legitiimne, tagastab see tõese; vastasel juhul tagastab see vale:
Terviklikkuse testimine
Nüüd saame oma plokiahela terviklikkuse proovile panna. Kui me selle praegu teostame, kinnitab see, et meie kett on ehtne.
Proovime nüüd oma plokiahelat rikkuda. Muudame plokki 2 ja kirjutame selle sisu üle (oletame, et kandsime nelja mündi asemel 100).
Kui me seda teostame, näeme, et tarkvara tunneb ära meie jõupingutused ketti rikkuda.
Siiski võite uskuda, et sellesse sekkumiseks on mul veel üks meetod. Muutsin ploki sisu, kuid ei arvutanud räsi ümber. Nii et võite proovida olla nutikas ja sama ploki räsi ümber arvutada.
See on kõik, mis meie pisikeses plokiahela seadistuses oli! See võimaldab meil lisada uusi plokke ja tuvastada ahelas olevate andmete rikkumist.
Meie väikese plokiahelaga on kaks probleemi, millega peame tegelema:
- Kaasaegsed arvutid on ülikiired ja suudavad meie ketti sekunditega lisada tuhandeid plokke. Ilmselgelt me ei taha, et keegi meie plokiahelat spämmiks.
- Meie plokiahel on endiselt rikkumiste suhtes haavatav. Saate värskendada ploki sisu ja seejärel lihtsalt ümber arvutada kõigi järgmiste plokkide räsid (ja eelnevad räsid). Isegi kui te sellega jama hakkate, saate lõpuks seadusliku ahela.
Nende probleemide lahendamiseks kasutavad plokiahelad tehnikat, mida nimetatakse töötõendiks. Peate näitama, et kasutasite seda lähenemisviisi kasutades ploki loomiseks märkimisväärsel hulgal arvutusressursse. Seda nimetatakse ka kaevandamine.
Töötõestus nõuab, et ploki räsi algaks kindla arvu nullidega. Kuid kuidas saate teada, kas teie räsi vastab sellele reeglile?
Ploki sisu määrab selle räsi. Seega saame alati sama räsi, tingimusel et me sisu ei muuda.
Igale plokile peaks lahendusena olema lisatud nonce väärtus. Need on sisuliselt juhuslikud andmed, mida saame värskendada, kuni meie ploki räsi algab piisava hulga nullidega. Kuna te ei saa muuta räsifunktsiooni väljundit, peate katsetama palju erinevaid kombinatsioone ja lootma parimat.
Tutvustage kaevandamist The Blockchainiga
Alustame sellest, et lisame oma klassi Block nonce. Nonce on meie ploki üksik väärtus, mida saame muuta, et mõjutada ploki räsi.
Me ei saa ajatemplit ega andmeid muuta.
Järgmiseks kirjutame funktsiooni mineBlock(), mis teeb ploki tegeliku kaevandamise. See funktsioon saadetakse parameetrina vajaliku raskusastmega ja jätkab täitmist, kuni meie ploki räsi algab piisava arvu nullidega.
Tegin just lihtsa while-tsükli, mis jookseks seni, kuni meie räsi algab piisava hulga nullidega. Kasutame raskust selleks, et määrata, kui palju nulle on vaja. Kui raskusaste on 5, peab meie räsi algama 5 nulliga.
Kui meie räsi ei sisalda piisavalt nulle, suurendame nonce'i ühe võrra ja arvutame räsi ümber. Ja kui leiame raskusele vastava räsi, logime selle konsooli.
Meil on veel üks asi, mida peame tegema. Me ei võta oma arvutamis-Hash-meetodis tegelikult mittemuutujat arvesse, seega on see siin:
Plokiahela klass
Paneme selle uue lähenemise meie plokiahela klassis proovile ja vaatame, kuidas läheb.
Alustuseks määratlen funktsioonis Object() meie plokiahela keerukuse. Määratleme selle siin, kuna saame seda hiljem kusagil kasutada.
Funktsiooni addBlock tuleb seejärel muuta nii, et see kaevandab ploki enne selle meie ahelasse lisamist.
Kasutage Blockchaini
Nüüd paneme oma uue plokiahela kasutama töötõenduse algoritmi. Lisage siia paar console.log avaldust.
Kui me seda koodi käivitame, näeme, et kaevandamisprotsess ei ole enam eriti kiire.
Kolme nulliga algavate räsidega plokkide genereerimiseks kulub algoritmil veidi aega (vastavalt raskusastmele konfigureeritud).
See oli meie plokiahela põhiseadistuse lõpp.
Tänu töötõendi mehhanismile saame reguleerida, kui kiiresti meie plokiahelasse uusi plokke lisatakse.
See on plokiahelate kõige olulisem turvafunktsioon. Ja nüüd, kui saate aru, kuidas see töötab, asuge looma oma!
Jäta vastus