Jei pažiūrėtume į pastarųjų kelerių metų tendencijas, tai apie blockchain girdėjome nuolat, tačiau apie specifiką nedaug.
Visi žinome, kad kriptovaliutos, tokios kaip Bitcoin, Ethereum, Dogecoin, Matic ir kitos, remiasi blockchain technologija. Blockchain vadovavo reikšmingiems įvykiams, kurie 2021 m. padarė revoliuciją daugelyje pramonės šakų ir atvėrė kelią naujiems laimėjimams.
„Blockchain“ yra duomenų saugojimo priemonė, kurią sunku arba neįmanoma redaguoti, įsilaužti ar apgauti. Tai skaitmeninė operacijų, kurios dubliuojamos ir pasklidusios visame blokų grandinės kompiuterių sistemų tinkle, knyga.
Tai novatoriška duomenų bazių technologija, kuri maitina praktiškai visas kriptovaliutas. „Blockchain“ apsunkina sistemos įsilaužimą ar apgaudinėjimą, nes visame tinkle paskleis identiškas duomenų bazės kopijas.
Nors dabar „Bitcoin“ yra ryškiausias „blockchain“ naudojimo būdas, ši technologija gali būti naudojama labai įvairioms programoms.
Kriptovaliutos ir blokų grandinės pastaraisiais metais tapo vis populiaresnės ir tikimasi, kad ši tendencija išliks.
Šioje pamokoje sukursime paprastą blokų grandinę su JavaScript. Tai suteiks jums pagrindinį supratimą apie tai, kaip veikia blokų grandinė.
Pavadinkime jį MelodyCoin ir iškart įsitraukime į veiksmą!
Bloko kūrimas
Norėdami pradėti, sukursime naują „JavaScript“ failą, kuriame įdėsime visą savo kodą.
Pavadinkime jį main.js ir pradėkime nuo aprašymo, kaip turėtų atrodyti blokų grandinė ir blokai.
Sukurkite Block klasę ir pirmiausia suteikite jai funkciją Object() { [native code] }.
Kurdami naują bloką turite nurodyti datą ir ankstesnio bloko maišą:
Čia pateikiami kiekvienos nuosavybės apibrėžimai:
- Laiko žyma rodo, kada blokas buvo sudarytas. Galite naudoti bet kokį pasirinktą formatą (šiuo atveju UNIX laiko žymą).
- Bet kokios formos duomenys, kuriuos norite prijungti prie šio bloko, gali būti įtraukti į duomenų parametrą. Jei norite sukurti kriptovaliutą, čia galite saugoti tokius operacijų duomenis kaip siuntėjas/gavėjas ir perkelta pinigų suma.
- Ankstesnė maiša yra eilutė, kurioje yra ankstesnio bloko maiša. Būtent tai sukurs blokų grandinę, kuri vėliau bus labai svarbi užtikrinant mūsų blokų grandinės vientisumą.
Maišos kūrimas
Kiekvienas blokas susieja su ankstesniu bloku (taigi, ankstesnė maišos nuosavybė). Tai reiškia, kad kiekvienam blokui reikia maišos. Maiša yra panaši į piršto atspaudą. Kiekvienam blokui jis yra skirtingas.
Bloko maišą galima apskaičiuoti perduodant visą jo turinį per maišos funkciją.
Taigi, pradėkime įdiegdami funkciją, kuri apskaičiuoja dabartinio bloko maišą.
Taigi, klasėje Block mes apibrėžiame Calculhash funkciją:
Tačiau „JavaScript“ nepalaiko SHA256 maišos, todėl ją reikia gauti iš išorinės bibliotekos.
„Crypto-js“ yra puikus paketas, apimantis saugų kelių maišos algoritmų įgyvendinimą.
Tada galime importuoti jį į savo main.js kodą.
Dabar, kai turime funkciją CalculateHash(), panaudokime ją savo bloko funkcijoje:
Aprašę, kaip atrodo blokas, galime apibrėžti, kaip turėtų atrodyti Blockchain. Taigi sukurkime naują klasę.
Pagal šį scenarijų blokų grandinė yra labai paprastas objektas, turintis nuosavybės grandinę. Tai yra masyvas, kuriame yra visi grandinės blokai.
Prieš pridėdami blokus, pirmiausia turime sukurti vadinamąjį „genezės bloką“. Tai pirmasis blokas grandinėje ir yra unikalus tuo, kad negali nurodyti ankstesnio bloko (tai pirmasis!).
Taigi, kad sukurčiau genezės bloką, prie mūsų klasės pridėsiu funkciją CreateGenesisBlock (). Grįžkite į mūsų Blockchain klasės funkciją Object() { [native code] }.
Dabar galime įtraukti genezės bloką bet kuriuo metu, kai sukursime naują Blockchain egzempliorių:
Blockchain metodai
Dabar prie mūsų „Blockchain“ klasės pridėkime metodų, kurie leis mums atlikti tokius veiksmus kaip pridėti naujų blokų ir gauti naujausią bloką.
Funkcija getLatestBlock yra pati paprasčiausia. Tai tiesiog grąžina paskutinį grandinės masyvo narį:
„AddBlock“ technika yra šiek tiek labiau įtraukta.
Kad galėtume į savo grandinę įtraukti naują bloką, pirmiausia turime tinkamai nustatyti to bloko ankstesnį maišos lauką.
Jis turi būti nustatytas į naujausio mūsų grandinės bloko maišą. Taip pat turime apskaičiuoti naujojo bloko maišą:
Testavimas
Pažiūrėkime, kaip pasirodė mūsų „MelodyCoin“.
Norėdami tai padaryti, sukurkite „blockchain“ egzempliorių. Pridėkime dar keletą blokų:
Ten padarėme du naujus blokus. Pažiūrėkime, kaip šiuo metu atrodo mūsų blokų grandinė.
„MelodyCoin“ bus suskaidytas ir suformatuotas keturiais tarpais:
Patikrinkite „Blockchain“ vientisumą
Blockchains yra fantastiškos, nes pridėjus bloką jo negalima modifikuoti nepažeidžiant likusios grandinės dalies.
Tačiau nėra jokio metodo, kuriuo galėčiau patikrinti mūsų blokų grandinės vientisumą naudojant šį įgyvendinimą.
Pristatykime „isChainValid“ funkciją mūsų „blockchain“. Jei grandinė yra teisėta, ji bus teisinga; kitu atveju jis grįš false:
Sąžiningumo tikrinimas
Dabar galime išbandyti savo blokų grandinės vientisumą. Jei tai atliksime dabar, tai patvirtins, kad mūsų grandinė yra tikra.
Dabar pabandykime sugadinti savo blokų grandinę. Pakeiskime 2 bloką ir perrašykime jo turinį (tarkime, vietoj keturių pervedėme 100 monetų).
Kai tai atliekame, matome, kad programinė įranga atpažįsta mūsų pastangas sugadinti grandinę.
Tačiau galite patikėti, kad man yra kitas būdas kištis į tai. Pakeičiau bloko turinį, bet maišos neperskaičiavau. Taigi galite pabandyti būti protingi ir perskaičiuoti to paties bloko maišą.
Tai viskas, kas buvo mūsų mažoje blokų grandinės sąrankoje! Tai leidžia mums pridėti naujų blokų ir aptikti duomenų klastojimą grandinėje.
Yra dvi problemos, susijusios su mūsų maža blokų grandine, kurias turime išspręsti:
- Šiuolaikiniai kompiuteriai yra itin greiti ir per kelias sekundes gali pridėti tūkstančius blokų į mūsų grandinę. Akivaizdu, kad nenorime, kad kas nors išsiųstų šlamštą į mūsų blokų grandinę.
- Mūsų blokų grandinė vis dar yra pažeidžiama dėl klastojimo. Galite atnaujinti bloko turinį ir tiesiog perskaičiuoti visų sekančių blokų maišą (ir ankstesnes maišas). Net jei su juo susimaišysite, gausite teisėtą grandinę.
Norėdami išspręsti šias problemas, blokų grandinės naudoja techniką, vadinamą „darbo įrodymu“. Turite įrodyti, kad naudodami šį metodą blokui sukurti panaudojote daug skaičiavimo išteklių. Tai taip pat vadinama kasyba.
Darbo įrodymas reikalauja, kad bloko maiša prasidėtų tam tikru nulių kiekiu. Bet kaip sužinoti, ar jūsų maiša atitinka šią taisyklę?
Bloko turinys nustato jo maišą. Taigi mes visada gauname tą pačią maišą, jei nekeičiame turinio.
Prie kiekvieno bloko kaip sprendimo turi būti pridėta nonce reikšmė. Iš esmės tai yra kai kurie atsitiktiniai duomenys, kuriuos galime atnaujinti tol, kol mūsų bloko maiša prasidės pakankamais nuliais. Kadangi negalite pakeisti maišos funkcijos išvesties, turite išbandyti daugybę skirtingų derinių ir tikėtis geriausio.
Pristatykite kasybą „Blockchain“.
Pradėkime įtraukdami nonce į mūsų Block klasę. Nonce yra vienintelė mūsų bloko reikšmė, kurią galime modifikuoti, kad paveiktų bloko maišą.
Negalime pakeisti laiko žymos ar duomenų.
Tada parašykime funkciją mineBlock(), kuri atliks faktinį bloko kasimą. Šiai funkcijai bus išsiųstas reikiamas sunkumas kaip parametras ir ji bus vykdoma tol, kol mūsų bloko maiša prasidės pakankamai nulių.
Aš ką tik sukūriau pagrindinę while kilpą, kuri būtų vykdoma tol, kol maišos prasidės pakankamai nulių. Mes naudojame sudėtingumą norėdami nustatyti, kiek nulių reikia. Kai sunkumas yra 5, mūsų maiša turi prasidėti 5 nuliais.
Kai mūsų maišoje nėra pakankamai nulių, nonce padidiname vienu ir perskaičiuojame maišą. Ir jei randame sunkumą atitinkantį maišos kodą, užregistruojame jį į konsolę.
Turime padaryti dar vieną dalyką. Mes tikrai neatsižvelgiame į nonce kintamąjį mūsų apskaičiavimo hash metodu, todėl čia yra:
Blockchain klasė
Išbandykime šį naują požiūrį savo „blockchain“ klasėje ir pažiūrėkime, kaip seksis.
Norėdami pradėti, apibrėžsiu mūsų blokų grandinės sudėtingumą funkcijoje Object(). Čia jį apibrėžiame, nes vėliau galėsime kur nors panaudoti.
Tada funkcija addBlock turi būti pakeista taip, kad ji išminuotų bloką prieš įtraukdama jį į mūsų grandinę.
Naudokite „Blockchain“.
Dabar pradėkime naudoti naują blokų grandinę su darbo įrodymo algoritmu. Čia pridėkite porą console.log teiginių.
Vykdydami šį kodą galime pastebėti, kad kasybos procesas nebėra ypač greitas.
Algoritmui reikia šiek tiek laiko sugeneruoti blokus su maišomis, kurios prasideda trimis nuliais (kaip sukonfigūruota pagal sunkumą).
Taigi tai buvo mūsų pagrindinės „blockchain“ sąrankos pabaiga.
Darbo patikrinimo mechanizmo dėka galime reguliuoti, kaip greitai į mūsų blokų grandinę įtraukiami nauji blokai.
Tai svarbiausia blokų grandinės saugumo funkcija. O dabar, kai supratote, kaip tai veikia, kurkite savo!
Palikti atsakymą