Aurreko urteotako joerei erreparatzen badiegu, denbora guztian entzun izan dugu blockchain-ari buruz, baina ez asko zehaztasunei buruz.
Denok dakigu Bitcoin, Ethereum, Dogecoin, Matic eta beste batzuk bezalako kriptomonetak blockchain teknologian oinarritzen direla. Blockchain-ek 2021ean industria ugari irauli zituzten gertaera esanguratsuak gidatu zituen eta lorpen berrietarako bidea ireki zuen.
Blockchain datuak editatzeko, hackeatzeko edo iruzur egiteko zaila edo ezinezkoa den modu bat da. Blockchain-en sistema informatikoen sare osoan bikoiztu eta zabaltzen diren transakzioen liburu digitala da.
Ia kripto-moneta guztiak bultzatzen dituen datu-baseen teknologia berritzailea da. Blockchain-ek izugarri zaila egiten du sistema hackeatzea edo iruzurra egitea datu-base baten kopia berdinak sare osoan zehar zabalduz.
Bitcoin gaur egun blockchain-en erabilerarik nabarmenena den arren, teknologiak aplikazio askotarako balio dezake.
Kriptomonetak eta blockchains-ak gero eta ezagunagoak izan dira azken urteotan, eta joera horrek jarraitzea espero da.
Tutorial honetan JavaScript-ekin blokeo-kate sinple bat egingo dugu. Blockchain baten funtzionamenduari buruzko oinarrizko ulermena emango dizu.
Dei diezaiogun MelodyCoin eta sartu zaitez ekintzara!
Bloke bat sortzea
Hasteko, JavaScript fitxategi berri bat sortuko dugu eta bertan gure kode guztia jarriko dugu.
Dei diezaiogun main.js eta has gaitezen bloke-kate batek eta blokeek nola itxura izan behar duten deskribatzen.
Sortu Block klase bat eta eman Object() { [berezko kodea] } funtzio bat hasteko.
Data bat eta aurreko blokearen hash-a eman behar dituzu bloke berri bat sortzean:
Hona hemen jabetza bakoitzaren definizioak:
- Denbora-zigiluak blokea noiz egin zen adierazten du. Aukeratzen duzun edozein formatu erabil dezakezu (kasu honetan, UNIX denbora-zigilua).
- Bloke honetara konektatu nahi duzun edozein datu sar daiteke datu-parametroan. Kriptografia-moneta bat sortu nahi baduzu, transakzio-datuak gorde ditzakezu, hala nola igorle/hartzailea eta mugitutako diru-kopurua hemen.
- previousHash aurreko blokearen hash-a gordetzen duen kate bat da. Hau da bloke-katea sortuko duena, eta hori funtsezkoa izango da gero gure bloke-katearen osotasuna eskaintzeko.
Hashak sortzea
Bloke bakoitzak aurreko blokearekin lotzen du (beraz, aurreko Hash propietatea). Hau da, bloke bakoitzak hash bat behar du. Hash bat hatz-markaren antzekoa da. Bloke bakoitzarentzat bereizten da.
Bloke baten hash-a bere eduki guztia hash-funtzio batetik pasatuz kalkula daiteke.
Beraz, has gaitezen uneko blokearen hash-a kalkulatzen duen funtzio bat ezartzen.
Beraz, Block klasean, calculateHash funtzioa definitzen dugu:
Hala ere, SHA256 hash-a ez da JavaScript onartzen eta kanpoko liburutegi batetik eskuratu behar da.
Crypto-js hainbat hash algoritmoren inplementazio seguruak biltzen dituen pakete zoragarria da.
Ondoren, gure main.js kodean inporta dezakegu.
Orain gure calculateHash() funtzioa daukagunez, jar dezagun gure Block-en funtzioan erabiltzeko:
Bloke batek nolakoa den deskribatu ondoren, Blockchain batek nolakoa izan behar duen definitu dezakegu. Beraz, sortu dezagun klase berri bat.
Eszenatoki honetan, blockchain jabetza-kate bat duen objektu oso sinplea da. Hau kateko bloke guztiak biltzen dituen array bat da.
Blokeak gehitu aurretik, lehenik eta behin "genesi blokea" deritzona sortu behar dugu. Hau kateko lehen blokea da, eta bakarra da ezin duelako aurreko bloke bat apuntatu (lehena da!).
Beraz, genesis blokea eraikitzeko, sortuGenesisBlock () izeneko funtzio bat gehituko diot gure klaseari. Itzuli gure Blockchain klaseko Object() { [berezko kodea] } funtziora.
Orain genesi blokea sartu dezakegu Blockchain instantzia berri bat eraikitzen dugun bakoitzean:
Blockchain metodoak
Orain, gehitu ditzagun metodoak gure Blockchain klasean, bloke berriak gehitzea eta bloke berriena lortzeko aukera emango digutenak.
getLatestBlock funtzioa oinarrizkoena da. Kate-matrizeko azken kidea besterik ez du itzultzen:
addBlock teknika apur bat gehiago inplikatuta dago.
Gure katera bloke berri bat gehitu aurretik, bloke horren aurreko Hash eremua behar bezala ezarri behar dugu.
Gure katean gehitu berri den blokearen hashean ezarri behar da. Bloke berriaren hash-a ere kalkulatu behar dugu:
Entseguak
Ea nola atera den gure MelodyCoin.
Sortu blockchain-en instantzia hori lortzeko. Gehi ditzagun bloke pare bat gehiago:
Bertan bi bloke berri egin ditugu. Ikus dezagun nolakoa den gure bloke-katea gaur egun.
MelodyCoin lau espaziorekin formatua eta formatua izango da:
Egiaztatu Blockchain-en osotasuna
Blockchains zoragarriak dira, bloke bat gehitu ondoren ezin baita aldatu katearen gainerako baliogabetu gabe.
Hala ere, ez dago metodorik inplementazio honekin gure bloke-katearen osotasuna egiaztatzeko.
Sar dezagun isChainValid funtzio bat gure bloke-katean. Katea zilegia bada, egia itzuliko da; bestela, false itzuliko da:
Osotasuna probatzea
Orain gure bloke-katearen osotasuna proban jar dezakegu. Orain exekutatzen badugu, gure katea benetakoa dela baieztatuko du.
Saia gaitezen orain gure bloke-katea manipulatzen. Alda dezagun 2. blokea eta gainidatzi dezagun bere edukia (demagun 100 txanpon transferitu ditugula lau ordez).
Hau exekutatzen dugunean, softwareak katea manipulatzeko dugun ahalegina aitortzen duela ikusiko dugu.
Dena den, sinetsi dezakezu beste metodo bat badela niretzat honetan nahasteko. Blokeko edukia aldatu nuen baina ez nuen hash-a berriro kalkulatu. Beraz, saia zaitezke argia izaten eta bloke bereko hasha berriro kalkulatzen.
Hori da gure blockchain konfigurazio txikian zegoen guztia! Bloke berriak gehitzeko eta kate barruko datuen manipulazioa detektatzeko aukera ematen digu.
Gure bloke-kate txikiarekin bi arazo daude, jorratu behar ditugunak:
- Ordenagailu modernoak oso azkarrak dira eta milaka bloke gehi ditzakete gure katera segundotan. Jakina, ez dugu nahi inor gure blockchain-a spammatzen.
- Gure bloke-katea manipulaziorako zaurgarria da oraindik. Bloke baten edukia egunera dezakezu eta, ondoren, hashak (eta aurreko hashak) berriro kalkula ditzakezu hurrengo bloke guztientzat. Nahiz eta nahastu, kate legitimo batekin amaituko duzu.
Kezka horiei aurre egiteko, bloke-kateek "lanaren froga" deritzon teknika erabiltzen dute. Ikuspegi hau erabiliz bloke bat sortzeko baliabide konputazional kopuru handia erabili duzula frogatu behar duzu. Honi ere deitzen zaio meatze-.
Lanaren frogak bloke baten hash-a zero kopuru zehatz batekin hastea eskatzen du. Baina nola jakin dezakezu zure hash arau honekin bat datorren ala ez?
Bloke baten edukiak bere hash-a zehazten du. Beraz, beti hash bera lortzen dugu, baldin eta edukia aldatzen ez badugu.
Bloke bakoitzak nonce balio bat izan beharko luke soluzio gisa. Hau da, funtsean, ausazko datu batzuk eguneratu ditzakegun blokearen hash-a nahikoa zerorekin hasten den arte. Hash funtzio baten irteera ezin duzulako aldatu, konbinazio ezberdin asko probatu behar dituzu eta onena espero.
Aurkeztu meatzaritza The Blockchain-en
Has gaitezen nonce bat sartzen gure Block klasean. Nonce gure blokearen barruan dagoen balio bakarra da, blokearen hashean eragiteko alda dezakeguna.
Ezin dugu denbora-zigilua edo datuak aldatu.
Ondoren, idatz dezagun mineBlock() bloke baten benetako meatzaritza egingo duen funtzio bat. Funtzio honi behar den zailtasuna bidaliko zaio parametro gisa eta exekutatzen jarraituko du gure blokearen hash-a nahikoa zerorekin hasten den arte.
Oinarrizko while begizta bat egin dut, gure hash-a nahikoa zerorekin hasten den arte exekutatzen zena. Zailtasuna zenbat zero behar diren zehazteko erabiltzen dugu. 5eko zailtasunarekin, gure hashak 5 zerorekin hasi behar du.
Gure hashak zero nahikoa ez dituenean, nonce-a bat igotzen dugu eta hash-a berriro kalkulatzen dugu. Eta zailtasunari dagokion hash bat aurkitzen badugu, kontsolan erregistratzen dugu.
Beste gauza bat egin behar dugu. Benetan ez dugu nonce aldagaia kontuan hartzen gure calculateHash metodoan, beraz, hona hemen:
Blockchain Klasea
Jar dezagun ikuspegi berri hau proban gure blockchain klasean eta ikus dezagun nola doan.
Hasteko, gure bloke-katearen zailtasuna Object() funtzioan zehaztuko dut. Hemen definitzen dugu gero nonbait erabil dezakegunez.
AddBlock funtzioa aldatu egin behar da, blokea meatze aldera gure katean gehitu aurretik.
Erabili Blockchain
Orain, jar dezagun gure bloke-kate berria lanaren froga-algoritmoarekin erabiltzeko. Hemen, gehitu console.log adierazpen pare bat.
Kode hau exekutatzen dugunean, meatze-prozesua jada ez dela bereziki azkarra ikusi dezakegu.
Denbora pixka bat behar du algoritmoak hiru zerorekin hasten diren hashekin blokeak sortzeko (zailtasunaren arabera konfiguratuta).
Beraz, gure oinarrizko blockchain konfigurazioaren amaiera izan zen.
Lana frogatzeko mekanismoari esker, bloke berriak gure bloke-katean zenbat azkar gehitzen diren arautu dezakegu.
Blockchains-en segurtasun-eginbide esanguratsuena da. Eta orain nola funtzionatzen duen ulertzen duzunean, hasi zeurea sortzen!
Utzi erantzun bat