Ak sa pozrieme na trendy za posledných pár rokov, o blockchaine sme neustále počuli, no o konkrétnostiach veľa nie.
Všetci si uvedomujeme, že kryptomeny ako Bitcoin, Ethereum, Dogecoin, Matic a ďalšie sa spoliehajú na technológiu blockchain. Blockchain viedol významné udalosti, ktoré v roku 2021 spôsobili revolúciu v mnohých odvetviach a vydláždili cestu k novým úspechom.
Blockchain je prostriedok na ukladanie údajov spôsobom, ktorý je ťažké alebo nemožné upravovať, hackovať alebo podvádzať. Ide o digitálnu účtovnú knihu transakcií, ktoré sa duplikujú a šíria po celej sieti počítačových systémov blockchainu.
Ide o prelomovú databázovú technológiu, ktorá poháňa prakticky všetky kryptomeny. Blockchain neuveriteľne sťažuje hackovanie alebo podvádzanie systému šírením identických kópií databázy v celej sieti.
Zatiaľ čo Bitcoin je teraz najvýznamnejším využitím pre blockchain, táto technológia môže slúžiť veľmi širokému spektru aplikácií.
Kryptomeny a blockchainy sú v posledných rokoch čoraz populárnejšie a očakáva sa, že tento trend bude pokračovať.
V tomto návode vytvoríme jednoduchý blockchain s JavaScriptom. Poskytne vám základné informácie o tom, ako blockchain funguje.
Nazvime to MelodyCoin a pustite sa priamo do akcie!
Vytvorenie bloku
Na začiatok vytvoríme nový súbor JavaScript, do ktorého umiestnime celý náš kód.
Nazvime to main.js a začnime popisom, ako by mal blockchain a bloky vyzerať.
Vytvorte triedu Block a na začiatok jej dajte funkciu Object() { [native code] }.
Pri vytváraní nového bloku musíte zadať dátum a hash predchádzajúceho bloku:
Tu sú definície pre každú vlastnosť:
- Časová pečiatka označuje, kedy bol blok vytvorený. Môžete použiť ľubovoľný formát (v tomto prípade časovú pečiatku UNIX).
- Do parametra údajov možno zahrnúť akúkoľvek formu údajov, ktoré chcete pripojiť k tomuto bloku. Ak si želáte vytvoriť kryptomenu, môžete si sem ponechať údaje o transakciách, ako je odosielateľ/príjemca a množstvo presunutých peňazí.
- PreviousHash je reťazec, ktorý obsahuje hash predchádzajúceho bloku. To je to, čo vygeneruje reťazec blokov, ktorý bude kritický pri poskytovaní integrity nášho blockchainu neskôr.
Vytváranie hashov
Každý blok odkazuje na predchádzajúci blok (teda vlastnosť previousHash). To znamená, že každý blok vyžaduje hash. Hash je podobný odtlačku prsta. Pre každý blok je odlišná.
Haš bloku sa dá vypočítať tak, že celý jeho obsah prejde cez hašovaciu funkciu.
Začnime teda implementáciou funkcie, ktorá vypočíta hash aktuálneho bloku.
Takže pod triedou Block definujeme funkciu vypočítaťHash:
Haš SHA256 však JavaScript nepodporuje a je potrebné ho získať z externej knižnice.
Crypto-js je fantastický balík, ktorý obsahuje bezpečné implementácie niekoľkých hash algoritmov.
Potom ho môžeme importovať do nášho kódu main.js.
Teraz, keď máme našu funkciu vypočítaťHash(), poďme ju použiť v našej blokovej funkcii:
Po opísaní toho, ako vyzerá blok, môžeme definovať, ako by mal vyzerať blockchain. Poďme teda vytvoriť novú triedu.
V tomto scenári je blockchain veľmi jednoduchý objekt, ktorý má reťazec vlastností. Toto je pole, ktoré obsahuje všetky bloky v reťazci.
Predtým, ako budeme môcť pridať bloky, musíme najprv vytvoriť to, čo je známe ako „blok genézy“. Toto je prvý blok v reťazci a je jedinečný v tom, že nemôže ukazovať na predchádzajúci blok (je prvý!).
Takže na zostavenie bloku genesis pridám do našej triedy funkciu s názvom createGenesisBlock (). Späť vo funkcii Object() { [native code] } našej triedy Blockchain.
Teraz môžeme zahrnúť blok genézy kedykoľvek vytvoríme novú inštanciu blockchainu:
Blockchain metódy
Teraz pridajte metódy do našej triedy Blockchain, ktoré nám umožnia robiť veci, ako je pridávanie nových blokov a načítanie najnovšieho bloku.
Funkcia getLatestBlock je najzákladnejšia. Jednoducho vráti posledný člen reťazového poľa:
Technika addBlock je o niečo viac zapojená.
Predtým, ako budeme môcť pridať nový blok do nášho reťazca, musíme najprv vhodne nastaviť predchádzajúce poleHash tohto bloku.
Musí byť nastavený na hodnotu hash naposledy pridaného bloku do nášho reťazca. Musíme tiež vypočítať hash nového bloku:
testovanie
Pozrime sa, ako vyšiel náš MelodyCoin.
Aby ste to dosiahli, vytvorte inštanciu blockchainu. Pridajme ešte pár blokov:
Urobili sme tam dva nové bloky. Poďme sa pozrieť, ako momentálne vyzerá náš blockchain.
MelodyCoin bude stringifikovaný a naformátovaný so štyrmi medzerami:
Overte integritu blockchainu
Blockchainy sú fantastické, pretože akonáhle bol pridaný blok, nie je možné ho upraviť bez toho, aby sa zneplatnil zvyšok reťazca.
Neexistuje však pre mňa žiadna metóda na kontrolu integrity nášho blockchainu s touto implementáciou.
Predstavme si do nášho blockchainu funkciu isChainValid. Ak je reťazec legitímny, vráti hodnotu true; inak vráti false:
Testovanie integrity
Teraz môžeme otestovať integritu nášho blockchainu. Ak to teraz vykonáme, potvrdí to, že naša reťaz je pravá.
Skúsme teraz zasahovať do nášho blockchainu. Zmeňme blok 2 a prepíšme jeho obsah (predpokladajme, že sme preniesli 100 mincí namiesto štyroch).
Keď to vykonáme, môžeme vidieť, že softvér rozpozná našu snahu zasahovať do reťazca.
Môžete však veriť, že existuje iný spôsob, ako sa do toho miešať. Zmenil som obsah v bloku, ale neprepočítal som hash. Môžete sa teda pokúsiť byť šikovný a prepočítať hash toho istého bloku.
To je všetko, čo sa týka nášho malého nastavenia blockchainu! Umožňuje nám pridávať nové bloky a detekovať manipuláciu s údajmi v rámci reťazca.
Náš malý blockchain má dva problémy, ktoré musíme vyriešiť:
- Moderné počítače sú extrémne rýchle a môžu do nášho reťazca pridať tisíce blokov v priebehu niekoľkých sekúnd. Samozrejme nechceme, aby niekto spamoval náš blockchain.
- Náš blockchain je stále náchylný na manipuláciu. Môžete aktualizovať obsah bloku a potom jednoducho prepočítať hash (a predchádzajúce hash) pre všetky nasledujúce bloky. Aj keď sa s tým potrápite, skončíte s legitímnym reťazcom.
Na riešenie týchto obáv používajú blockchainy techniku známu ako „dôkaz o práci“. Musíte preukázať, že ste použili značné množstvo výpočtových zdrojov na vytvorenie bloku pomocou tohto prístupu. Toto sa tiež nazýva baníctva.
Dôkaz o práci vyžaduje, aby hash bloku začínal konkrétnym počtom núl. Ale ako môžete vedieť, či váš hash vyhovuje tomuto pravidlu?
Obsah bloku určuje jeho hash. Takže vždy získame rovnaký hash, za predpokladu, že neupravíme obsah.
Každý blok by mal mať ako riešenie pridanú hodnotu nonce. Toto sú v podstate nejaké náhodné údaje, ktoré môžeme aktualizovať, kým hash nášho bloku nezačne s dostatočným počtom núl. Pretože nemôžete zmeniť výstup hašovacej funkcie, musíte otestovať veľa rôznych kombinácií a dúfať v to najlepšie.
Predstavte ťažbu blockchainu
Začnime zahrnutím nonce do našej triedy Block. Nonce je jediná hodnota v rámci nášho bloku, ktorú môžeme upraviť, aby ovplyvnila hash bloku.
Nie sme schopní zmeniť časovú pečiatku ani údaje.
Ďalej napíšme funkciu mineBlock(), ktorá vykoná skutočné ťaženie bloku. Táto funkcia odošle potrebnú obtiažnosť ako parameter a bude pokračovať vo vykonávaní, kým hash nášho bloku nezačne s dostatočným počtom núl.
Práve som vytvoril základnú slučku while, ktorá bude bežať, kým náš hash nezačne s dostatočným počtom núl. Pomocou obtiažnosti určíme, koľko núl je potrebných. Pri obtiažnosti 5 musí náš hash začínať 5 nulami.
Keď náš hash neobsahuje dostatok núl, zvýšime nonce o jednotku a prepočítame hash. A ak nájdeme hash, ktorý zodpovedá obtiažnosti, prihlásime ho do konzoly.
Je tu ešte jedna vec, ktorú musíme urobiť. V našej metóde vypočítaťHash v skutočnosti neberieme do úvahy premennú nonce, takže tu je:
Blockchain trieda
Otestujme tento nový prístup v našej triede blockchainu a uvidíme, ako to pôjde.
Na začiatok zadefinujem náročnosť nášho blockchainu vo funkcii Object(). Definujeme ho tu, pretože ho môžeme neskôr niekde použiť.
Funkcia addBlock musí byť potom upravená tak, aby ťažila blok pred jeho pridaním do nášho reťazca.
Použite Blockchain
Teraz začnime používať náš nový blockchain s algoritmom proof-of-work. Tu pridajte niekoľko príkazov console.log.
Keď spustíme tento kód, môžeme pozorovať, že proces ťažby už nie je príliš rýchly.
Algoritmu trvá nejaký čas, kým vygeneruje bloky s hashmi, ktoré začínajú tromi nulami (podľa obtiažnosti).
Takže to bol koniec nášho základného nastavenia blockchainu.
Môžeme regulovať, ako rýchlo sa do nášho blockchainu pridávajú nové bloky vďaka mechanizmu proof-of-work.
Je to najdôležitejší bezpečnostný prvok na blockchainoch. A teraz, keď ste pochopili, ako to funguje, začnite vytvárať svoj vlastný!
Nechaj odpoveď