Nëse shikojmë tendencat e viteve të mëparshme, kemi dëgjuar për blockchain gjatë gjithë kohës, por jo shumë për specifikat.
Ne të gjithë jemi të vetëdijshëm se kriptovalutat si Bitcoin, Ethereum, Dogecoin, Matic dhe të tjera mbështeten në teknologjinë blockchain. Blockchain udhëhoqi ngjarjet e rëndësishme që revolucionarizuan industri të shumta në 2021 dhe hapën rrugën për arritje të reja.
Blockchain është një mjet për të ruajtur të dhënat në një mënyrë që është e vështirë ose e pamundur për t'u modifikuar, hakuar ose mashtruar. Është një libër dixhital i transaksioneve që dublikohen dhe përhapen në të gjithë rrjetin e sistemeve kompjuterike të blockchain.
Është teknologjia novatore e bazës së të dhënave që fuqizon praktikisht të gjitha kriptovalutat. Blockchain e bën tepër të vështirë hakimin ose mashtrimin e sistemit duke shpërndarë kopje identike të një baze të dhënash në një rrjet të tërë.
Ndërsa Bitcoin është tani përdorimi më i spikatur për blockchain, teknologjia mund të shërbejë për një shumëllojshmëri shumë të gjerë aplikimesh.
Kriptovalutat dhe blockchains kanë qenë gjithnjë e më të njohura vitet e fundit dhe ky trend pritet të vazhdojë.
Ne do të bëjmë një blockchain të thjeshtë me JavaScript në këtë tutorial. Do t'ju ofrojë një kuptim bazë se si funksionon një blockchain.
Le ta quajmë atë MelodyCoin dhe të hyjmë menjëherë në veprim!
Krijimi i një blloku
Për të filluar, ne do të krijojmë një skedar të ri JavaScript në të cilin do të vendosim të gjithë kodin tonë.
Le ta quajmë main.js dhe të fillojmë me një përshkrim se si duhet të duken një blockchain dhe blloqet.
Krijoni një klasë Blloku dhe jepini asaj një funksion Object() { [kodi vendas] } për të filluar.
Ju duhet të jepni një datë dhe hash-in e bllokut të mëparshëm kur krijoni një bllok të ri:
Këtu janë përkufizimet për secilën pronë:
- Vula kohore tregon se kur është bërë bllokimi. Ju mund të përdorni cilindo format që zgjidhni (në këtë rast, një vulë kohore UNIX).
- Çdo formë e të dhënave që dëshironi të lidhni me këtë bllok mund të përfshihet në parametrin e të dhënave. Nëse dëshironi të krijoni një kriptomonedhë, mund të ruani të dhënat e transaksionit si dërguesi/marrësi dhe sasia e parave të zhvendosura këtu.
- PreviousHash është një varg që mban hash-in e bllokut të mëparshëm. Kjo është ajo që do të gjenerojë zinxhirin e blloqeve, të cilat do të jenë kritike në sigurimin e integritetit të blockchain-it tonë më vonë.
Krijimi i Hasheve
Çdo bllok lidhet me bllokun e mëparshëm (pra, vetia e mëparshmeHash). Kjo do të thotë, çdo bllok kërkon një hash. Një hash është i ngjashëm me një gjurmë gishti. Është e dallueshme për çdo bllok.
Hash-i i një blloku mund të llogaritet duke kaluar të gjithë përmbajtjen e tij përmes një funksioni hash.
Pra, le të fillojmë duke zbatuar një funksion që llogarit hash-in e bllokut aktual.
Pra, nën klasën Blloku, ne përcaktojmë funksionin llogariturHash:
Megjithatë, hash-i SHA256 nuk mbështetet nga JavaScript dhe duhet të merret nga një bibliotekë e jashtme.
Crypto-js është një paketë fantastike që përfshin implementime të sigurta të disa algoritmeve hash.
Më pas mund ta importojmë në kodin tonë main.js.
Tani që kemi funksionin tonë të llogarisëHash(), le ta përdorim atë në funksionin e Bllokut tonë:
Pasi të përshkruajmë se si duket një Bllok, ne mund të përcaktojmë se si duhet të duket një Blockchain. Pra, le të krijojmë një klasë të re.
Në këtë skenar, blockchain është një objekt shumë i thjeshtë që ka një zinxhir pronësie. Ky është një grup që mban të gjitha blloqet në zinxhir.
Përpara se të shtojmë blloqe, së pari duhet të krijojmë atë që njihet si "blloku i gjenezës". Ky është blloku i parë në zinxhir dhe është unik në atë që nuk mund të tregojë një bllok të mëparshëm (është i pari!).
Pra, për të ndërtuar bllokun e gjenezës, unë do të shtoj një funksion në klasën tonë të quajtur createGenesisBlock (). Kthehu në funksionin Object() { [kodi vendas] } i klasës sonë Blockchain.
Tani mund të përfshijmë bllokun e gjenezës sa herë që ndërtojmë një shembull të ri Blockchain:
Metodat e Blockchain
Tani, le të shtojmë metoda në klasën tonë Blockchain që do të na lejojnë të bëjmë gjëra të tilla si shtimi i blloqeve të reja dhe marrja e bllokut më të fundit.
Funksioni getLatestBlock është më themelor. Thjesht kthen anëtarin përfundimtar të grupit të zinxhirit:
Teknika e addBlock është pak më e përfshirë.
Përpara se të mund të shtojmë një bllok të ri në zinxhirin tonë, së pari duhet të vendosim siç duhet fushën e mëparshmeHash të atij blloku.
Duhet të vendoset në hash-in e bllokut të shtuar së fundmi në zinxhirin tonë. Ne gjithashtu duhet të llogarisim hash-in e bllokut të ri:
Testim
Le të shohim se si ka dalë MelodyCoin tonë.
Krijoni një shembull blockchain për ta arritur këtë. Le të shtojmë disa blloqe të tjera:
Ne kemi bërë dy blloqe të reja atje. Le të hedhim një vështrim se si duket aktualisht blockchain-i ynë.
MelodyCoin do të lidhet dhe formatohet me katër hapësira:
Verifikoni integritetin e Blockchain
Blockchains janë fantastike sepse pasi të jetë shtuar një bllok, ai nuk mund të modifikohet pa zhvlerësuar pjesën e mbetur të zinxhirit.
Sidoqoftë, nuk ka asnjë metodë që unë të kontrolloj integritetin e blockchain-it tonë me këtë zbatim.
Le të prezantojmë një funksion isChainValid në blockchain tonë. Nëse zinxhiri është legjitim, ai do të kthehet i vërtetë; përndryshe, do të kthehet false:
Testimi i integritetit
Tani mund të vëmë në provë integritetin e blockchain-it tonë. Nëse e ekzekutojmë tani, do të konfirmojë që zinxhiri ynë është i vërtetë.
Le të përpiqemi tani të ngacmojmë blockchain-in tonë. Le të ndryshojmë bllokun 2 dhe të mbishkruajmë përmbajtjen e tij (le të supozojmë se kemi transferuar 100 monedha në vend të katër).
Kur e ekzekutojmë këtë, mund të shohim se softueri njeh përpjekjet tona për të ngacmuar zinxhirin.
Megjithatë, ju mund të besoni se ka një metodë tjetër për mua për të përzier me këtë. Ndryshova përmbajtjen në bllok, por nuk e rillogarita hash-in. Kështu që mund të përpiqeni të jeni të zgjuar dhe të rillogaritni hash-in e të njëjtit bllok.
Kjo është gjithçka që kishte në konfigurimin tonë të vogël të blockchain! Ai na mundëson të shtojmë blloqe të reja dhe të zbulojmë ngacmimet e të dhënave brenda zinxhirit.
Ekzistojnë dy çështje me blockchain tonë të vogël që duhet t'i adresojmë:
- Kompjuterët modernë janë jashtëzakonisht të shpejtë dhe mund të shtojnë mijëra blloqe në zinxhirin tonë në sekonda. Natyrisht, ne nuk duam që dikush të dërgojë mesazhe të padëshiruara për blockchain tonë.
- Blockchain-i ynë është ende i prekshëm ndaj ndërhyrjeve. Ju mund të përditësoni përmbajtjen e një blloku dhe më pas thjesht të rillogaritni hash-et (dhe hash-et e mëparshme) për të gjitha blloqet e mëposhtme. Edhe nëse ngatërroni me të, do të përfundoni me një zinxhir të ligjshëm.
Për të adresuar këto shqetësime, blockchains përdorin një teknikë të njohur si "provë e punës". Ju duhet të demonstroni se keni përdorur një sasi të konsiderueshme burimesh llogaritëse për të krijuar një bllok duke përdorur këtë qasje. Kjo quhet edhe miniere.
Vërtetimi i punës kërkon që hash-i i një blloku të fillojë me një sasi specifike zero. Por si mund ta dini nëse hash-i juaj i përshtatet këtij rregulli?
Përmbajtja e një blloku përcakton hash-in e tij. Pra, ne gjithmonë marrim të njëjtin hash, me kusht që të mos modifikojmë përmbajtjen.
Çdo bllok duhet të ketë një vlerë nonce të shtuar si zgjidhje. Këto janë në thelb disa të dhëna të rastësishme që ne mund t'i përditësojmë derisa hash-i i bllokut tonë të fillojë me zero të mjaftueshme. Për shkak se nuk mund të ndryshoni daljen e një funksioni hash, duhet të testoni shumë kombinime të ndryshme dhe të shpresoni për më të mirën.
Prezantoni Mining në Blockchain
Le të fillojmë duke përfshirë një nonce në klasën tonë Blloku. Nonce është vlera e vetme brenda bllokut tonë që ne mund ta modifikojmë për të ndikuar në hash-in e bllokut.
Nuk jemi në gjendje të ndryshojmë vulën kohore ose të dhënat.
Më pas, le të shkruajmë një funksion mineBlock() që do të bëjë gërmimin aktual të një blloku. Ky funksion do t'i dërgohet vështirësisë së nevojshme si parametër dhe do të vazhdojë të ekzekutohet derisa hash-i i bllokut tonë të fillojë me zero të mjaftueshme.
Sapo bëra një cikli bazë while që do të funksiononte derisa hash-i ynë të fillojë me zero të mjaftueshme. Ne përdorim vështirësinë për të përcaktuar se sa zero nevojiten. Me një vështirësi prej 5, hash-i ynë duhet të fillojë me 5 zero.
Kur hash-i ynë nuk përmban zero të mjaftueshme, ne e ngremë noncen me një dhe rillogaritim hash-in. Dhe nëse gjejmë një hash që korrespondon me vështirësinë, ne e regjistrojmë atë në tastierë.
Ka edhe një gjë që duhet të bëjmë. Ne në të vërtetë nuk e marrim parasysh variablin nonce në metodën tonë të llogaritjes Hash, kështu që këtu është:
Klasa e Blockchain
Le ta testojmë këtë qasje të re në klasën tonë të blockchain dhe të shohim se si shkon.
Për të filluar, unë do të përcaktoj vështirësinë e blockchain-it tonë në funksionin Object(). Ne e përcaktojmë atë këtu pasi mund ta përdorim diku më vonë.
Funksioni addBlock më pas duhet të modifikohet në mënyrë që të minojë bllokun përpara se ta shtojë atë në zinxhirin tonë.
Përdorni Blockchain
Tani, le të përdorim blockchain-in tonë të ri me algoritmin e provës së punës. Këtu, shtoni disa deklarata console.log.
Kur ekzekutojmë këtë kod, mund të vërejmë se procesi i minierave nuk është më veçanërisht i shpejtë.
Duhet pak kohë që algoritmi të gjenerojë blloqe me hash që fillojnë me tre zero (siç konfigurohet nga vështirësia).
Pra, ky ishte fundi i konfigurimit tonë bazë të blockchain.
Ne mund të rregullojmë se sa shpejt shtohen blloqe të reja në blockchain tonë falë mekanizmit të provës së punës.
Është tipari më i rëndësishëm i sigurisë në blockchains. Dhe tani që e kuptoni se si funksionon, vazhdoni të krijoni tuajën!
Lini një Përgjigju