Jos katsomme aiempien vuosien trendejä, olemme kuulleet lohkoketjusta koko ajan, mutta emme juurikaan yksityiskohdista.
Tiedämme kaikki, että kryptovaluutat, kuten Bitcoin, Ethereum, Dogecoin, Matic ja muut, perustuvat lohkoketjuteknologiaan. Blockchain johti merkittäviä tapahtumia, jotka mullistivat lukuisia toimialoja vuonna 2021 ja tasoittivat tietä uusille saavutuksille.
Blockchain on tapa tallentaa tietoja tavalla, jota on vaikea tai mahdoton muokata, hakkeroida tai huijata. Se on digitaalinen kirjanpito tapahtumista, jotka monistetaan ja levitetään lohkoketjun koko tietokonejärjestelmäverkostoon.
Se on uraauurtava tietokantatekniikka, joka toimii käytännössä kaikissa kryptovaluutoissa. Blockchain tekee järjestelmän hakkeroimisesta tai huijaamisesta uskomattoman vaikeaa levittämällä identtisiä kopioita tietokannasta koko verkkoon.
Vaikka Bitcoin on nyt näkyvin lohkoketjun käyttötarkoitus, tekniikka voi palvella hyvin monenlaisia sovelluksia.
Kryptovaluutat ja lohkoketjut ovat olleet yhä suositumpia viime vuosina, ja tämän trendin odotetaan jatkuvan.
Teemme tässä opetusohjelmassa yksinkertaisen lohkoketjun JavaScriptillä. Se antaa sinulle perustiedot siitä, kuinka lohkoketju toimii.
Kutsutaan sitä MelodyCoiniksi ja lähdetään mukaan toimintaan!
Lohkon luominen
Aluksi luomme uuden JavaScript-tiedoston, johon sijoitamme kaikki koodimme.
Kutsutaan sitä main.js:ksi ja aloitetaan kuvauksella siitä, miltä lohkoketjun ja lohkojen pitäisi näyttää.
Luo Block-luokka ja anna sille aluksi funktio Object() { [natiivikoodi] }.
Sinun on annettava päivämäärä ja edellisen lohkon hash, kun luot uutta lohkoa:
Tässä ovat kunkin ominaisuuden määritelmät:
- Aikaleima osoittaa, milloin lohko tehtiin. Voit käyttää mitä tahansa valitsemaasi muotoa (tässä tapauksessa UNIX-aikaleimaa).
- Dataparametriin voidaan sisällyttää mitä tahansa dataa, jonka haluat yhdistää tähän lohkoon. Jos haluat luoda kryptovaluutan, voit säilyttää täällä tapahtumatiedot, kuten lähettäjän/vastaanottajan ja siirretyn rahamäärän.
- previousHash on merkkijono, joka sisältää edellisen lohkon tiivisteen. Tämä luo lohkoketjun, joka on kriittinen lohkoketjumme eheyden takaamisessa myöhemmin.
Hasheiden luominen
Jokainen lohko linkittää edelliseen lohkoon (siis previousHash-ominaisuuteen). Eli jokainen lohko vaatii hashin. Hash on samanlainen kuin sormenjälki. Se on erillinen jokaiselle lohkolle.
Lohkon hash voidaan laskea kuljettamalla sen kaikki sisältö hash-funktion läpi.
Joten aloitetaan toteuttamalla funktio, joka laskee nykyisen lohkon hajautusarvon.
Joten Block-luokassa määritämme CalculaHash-funktion:
JavaScript ei kuitenkaan tue SHA256-tiivistettä, vaan se on hankittava ulkoisesta kirjastosta.
Crypto-js on loistava paketti, joka sisältää useiden hajautusalgoritmien turvalliset toteutukset.
Sitten voimme tuoda sen main.js-koodiimme.
Nyt kun meillä on laskelmaHash()-funktio, otetaan se käyttöön Block-funktiossamme:
Kuvattuamme, miltä Block näyttää, voimme määrittää, miltä Blockchainin tulisi näyttää. Luodaan siis uusi luokka.
Tässä skenaariossa lohkoketju on hyvin yksinkertainen objekti, jolla on omaisuusketju. Tämä on ryhmä, joka sisältää kaikki ketjun lohkot.
Ennen kuin voimme lisätä lohkoja, meidän on ensin luotava niin kutsuttu "geneesilohko". Tämä on ketjun ensimmäinen lohko, ja se on ainutlaatuinen siinä mielessä, että se ei voi osoittaa aiempaa lohkoa (se on ensimmäinen!).
Joten luodakseni genesis-lohkon lisään luokkaamme funktion nimeltä createGenesisBlock (). Takaisin Blockchain-luokkamme funktioon Object() { [natiivikoodi] }.
Voimme nyt sisällyttää genesis-lohkon aina, kun rakennamme uuden Blockchain-esiintymän:
Blockchain-menetelmät
Lisätään nyt menetelmiä Blockchain-luokkaamme, joiden avulla voimme tehdä asioita, kuten lisätä uusia lohkoja ja noutaa uusimman lohkon.
GetLatestBlock-toiminto on yksinkertaisin. Se yksinkertaisesti palauttaa ketjutaulukon viimeisen jäsenen:
AddBlock-tekniikka on hieman enemmän mukana.
Ennen kuin voimme lisätä uuden lohkon ketjuumme, meidän on ensin asetettava asianmukaisesti kyseisen lohkon edellinen hash-kenttä.
Se on asetettava ketjuumme viimeksi lisätyn lohkon hajautusarvoon. Meidän on myös laskettava uuden lohkon hash:
Testaus
Katsotaan kuinka MelodyCoinimme on tullut ulos.
Luo lohkoketjuinstanssi tämän suorittamiseksi. Lisätään vielä pari lohkoa:
Olemme tehneet sinne kaksi uutta lohkoa. Katsotaanpa, miltä lohkoketjumme näyttää tällä hetkellä.
MelodyCoin ketjutetaan ja muotoillaan neljällä välilyönnillä:
Tarkista Blockchainin eheys
Lohkoketjut ovat fantastisia, koska kun lohko on lisätty, sitä ei voi muokata ilman, että ketjun loppuosa mitätöidään.
Minulla ei kuitenkaan ole menetelmää tarkistaa lohkoketjumme eheyttä tällä toteutuksella.
Esittelemme isChainValid-funktion lohkoketjuumme. Jos ketju on laillinen, se palaa tosi; muuten se palauttaa false:
Eheyden testaus
Voimme nyt testata lohkoketjumme eheyden. Jos toteutamme sen nyt, se vahvistaa, että ketjumme on aito.
Yritetään nyt peukaloida lohkoketjuamme. Muutetaan lohkoa 2 ja kirjoitetaan sen sisältö päälle (oletetaan, että siirrämme 100 kolikkoa neljän sijaan).
Kun suoritamme tämän, voimme nähdä, että ohjelmisto tunnistaa yrityksemme peukaloida ketjua.
Voit kuitenkin uskoa, että minulla on toinen tapa puuttua tähän. Muutin lohkon sisältöä, mutta en laskenut uudelleen hashia. Joten voit yrittää olla fiksu ja laskea uudelleen saman lohkon hajautusarvon.
Siinä kaikki pienessä blockchain-kokoonpanossamme! Sen avulla voimme lisätä uusia lohkoja ja havaita tietojen peukalointi ketjussa.
Pienessä lohkoketjussamme on kaksi ongelmaa, jotka meidän on ratkaistava:
- Nykyaikaiset tietokoneet ovat erittäin nopeita ja voivat lisätä tuhansia lohkoja ketjuumme sekunneissa. Emme tietenkään halua kenenkään lähettävän lohkoketjuamme roskapostiksi.
- Lohkoketjumme on edelleen altis peukalointille. Voit päivittää lohkon sisällön ja sitten yksinkertaisesti laskea uudelleen tiivisteet (ja aikaisemmat tiivisteet) kaikille seuraaville lohkoille. Vaikka sotket sen kanssa, päädyt lailliseen ketjuun.
Näiden huolenaiheiden ratkaisemiseksi lohkoketjut käyttävät tekniikkaa, joka tunnetaan nimellä "todiste työstä". Sinun on osoitettava, että käytit huomattavan määrän laskennallisia resursseja lohkon luomiseen tätä lähestymistapaa käyttämällä. Tätä kutsutaan myös kaivostoiminta.
Työn todistaminen edellyttää, että lohkon hash alkaa tietyllä määrällä nollia. Mutta mistä voit tietää, sopiiko hajautus tähän sääntöön?
Lohkon sisältö määrittää sen hashin. Joten saamme aina saman hashin, jos emme muuta sisältöä.
Jokaiseen lohkoon tulisi lisätä ratkaisuna nonce-arvo. Tämä on pohjimmiltaan satunnaista dataa, jota voimme päivittää, kunnes lohkomme hash alkaa tarpeeksi nollia. Koska et voi muuttaa hash-funktion tulosta, sinun on testattava monia erilaisia yhdistelmiä ja toivottava parasta.
Esittele kaivostoiminta Blockchainissa
Aloitetaan lisäämällä nonce Block-luokkaamme. Nonce on yksittäinen arvo lohkossamme, jota voimme muokata vaikuttamaan lohkon hajautusarvoon.
Emme voi muuttaa aikaleimaa tai tietoja.
Seuraavaksi kirjoitetaan mineBlock()-funktio, joka tekee varsinaisen lohkon louhinnan. Tämä toiminto lähettää tarvittavan vaikeusasteen parametrina ja jatkaa sen suorittamista, kunnes lohkomme hash alkaa riittävällä määrällä nollia.
Tein juuri perus while-silmukan, joka jatkuisi, kunnes tiiviste alkaa tarpeeksi nollia. Käytämme vaikeutta määrittääksemme, kuinka monta nollaa tarvitaan. Kun vaikeusaste on 5, tiivisteemme täytyy alkaa viidellä nollalla.
Kun tiiviste ei sisällä tarpeeksi nollia, nostamme nollaa yhdellä ja laskemme tiivisteen uudelleen. Ja jos löydämme vaikeutta vastaavan hashin, kirjaamme sen konsoliin.
Meidän on tehtävä vielä yksi asia. Emme todellakaan ota nonce-muuttujaa huomioon laskentahash-menetelmässämme, joten tässä se on:
Blockchain-luokka
Testataan tämä uusi lähestymistapa lohkoketjuluokassamme ja katsotaan kuinka se menee.
Aluksi määrittelen lohkoketjumme vaikeuden funktiossa Object(). Määrittelemme sen tässä, koska voimme käyttää sitä jossain myöhemmin.
AddBlock-toimintoa on sitten muutettava siten, että se louhii lohkon ennen sen lisäämistä ketjuumme.
Käytä Blockchainia
Otetaan nyt uusi lohkoketjumme käyttöön proof-of-work -algoritmin kanssa. Lisää tähän pari console.log-lausetta.
Kun suoritamme tämän koodin, voimme havaita, että louhintaprosessi ei ole enää erityisen nopea.
Kestää jonkin aikaa, ennen kuin algoritmi luo lohkoja tiivisteillä, jotka alkavat kolmella nollalla (vaikeusasteen mukaan).
Tämä oli siis lohkoketjun perusasetuksen loppu.
Voimme säädellä kuinka nopeasti uusia lohkoja lisätään lohkoketjuumme proof-of-work -mekanismin ansiosta.
Se on lohkoketjujen merkittävin suojausominaisuus. Ja nyt kun ymmärrät, miten se toimii, ala luomaan oma!
Jätä vastaus