Pokud se podíváme na trendy posledních pár let, o blockchainu jsme slyšeli neustále, ale o specifikách moc ne.
Všichni si uvědomujeme, že kryptoměny jako bitcoin, ethereum, dogecoin, matice a další spoléhají na technologii blockchain. Blockchain vedl významné události, které v roce 2021 způsobily revoluci v mnoha průmyslových odvětvích a připravily půdu pro nové úspěchy.
Blockchain je prostředek k ukládání dat způsobem, který je těžké nebo nemožné upravovat, hackovat nebo podvádět. Je to digitální účetní kniha transakcí, které jsou duplikovány a šířeny po celé síti počítačových systémů blockchainu.
Je to průlomová databázová technologie, která pohání prakticky všechny kryptoměny. Blockchain neuvěřitelně ztěžuje hackování nebo podvádění systému šířením identických kopií databáze po celé síti.
Zatímco bitcoin je nyní nejvýznamnějším využitím pro blockchain, tato technologie může sloužit velmi široké škále aplikací.
Kryptoměny a blockchainy jsou v posledních letech stále populárnější a očekává se, že tento trend bude pokračovat.
V tomto tutoriálu vytvoříme jednoduchý blockchain s JavaScriptem. Poskytne vám základní pochopení toho, jak blockchain funguje.
Říkejme tomu MelodyCoin a pusťte se rovnou do akce!
Vytvoření bloku
Nejprve vytvoříme nový soubor JavaScript, do kterého umístíme veškerý náš kód.
Nazvěme to main.js a začněme popisem, jak by měl blockchain a bloky vypadat.
Vytvořte třídu Block a pro začátek jí dejte funkci Object() { [nativní kód] }.
Při vytváření nového bloku musíte zadat datum a hash předchozího bloku:
Zde jsou definice pro každou vlastnost:
- Časové razítko označuje, kdy byl blok vytvořen. Můžete použít libovolný formát (v tomto případě časové razítko UNIX).
- Do parametru data lze zahrnout jakoukoli formu dat, kterou chcete k tomuto bloku připojit. Pokud si přejete vytvořit kryptoměnu, můžete zde uchovávat transakční údaje, jako je odesílatel/příjemce a množství peněz, které byly přesunuty.
- PředchozíHash je řetězec, který obsahuje hash předchozího bloku. To je to, co vygeneruje řetězec bloků, který bude později rozhodující pro zajištění integrity našeho blockchainu.
Vytváření hashů
Každý blok odkazuje na předchozí blok (tedy vlastnost previousHash). To znamená, že každý blok vyžaduje hash. Hash je podobný otisku prstu. Pro každý blok je odlišná.
Hash bloku lze vypočítat předáním veškerého jeho obsahu přes hashovací funkci.
Začněme tedy implementací funkce, která vypočítá hash aktuálního bloku.
Takže pod třídou Block definujeme funkci vypočítatHash:
Hash SHA256 však JavaScript nepodporuje a musí být získán z externí knihovny.
Crypto-js je fantastický balíček, který obsahuje bezpečné implementace několika hashovacích algoritmů.
Poté jej můžeme importovat do našeho kódu main.js.
Nyní, když máme naši funkci vypočístHash(), dáme ji k použití v naší funkci Block:
Po popisu toho, jak vypadá blok, můžeme definovat, jak by měl vypadat blockchain. Pojďme tedy vytvořit novou třídu.
V tomto scénáři je blockchain velmi jednoduchý objekt, který má řetězec vlastností. Toto je pole obsahující všechny bloky v řetězci.
Než budeme moci přidávat bloky, musíme nejprve vytvořit to, co je známé jako „blok geneze“. Toto je první blok v řetězci a je jedinečný v tom, že nemůže ukazovat na předchozí blok (je první!).
Abych tedy vytvořil blok genesis, přidám do naší třídy funkci s názvem createGenesisBlock (). Zpět ve funkci Object() { [nativní kód] } naší třídy Blockchain.
Nyní můžeme zahrnout blok genesis, kdykoli vytvoříme novou instanci Blockchainu:
Blockchainové metody
Nyní do naší třídy Blockchain přidejte metody, které nám umožní dělat věci, jako je přidávat nové bloky a načítat nejnovější blok.
Funkce getLatestBlock je nejzákladnější. Jednoduše vrátí poslední člen řetězového pole:
Technika addBlock je trochu více zapojena.
Než budeme moci přidat nový blok do našeho řetězce, musíme nejprve vhodně nastavit pole previousHash daného bloku.
Musí být nastaven na hodnotu hash naposledy přidaného bloku do našeho řetězce. Musíme také vypočítat hash nového bloku:
Testování
Pojďme se podívat, jak vyšel náš MelodyCoin.
Chcete-li to provést, vytvořte instanci blockchainu. Přidejme ještě pár bloků:
Udělali jsme tam dva nové bloky. Pojďme se podívat, jak náš blockchain aktuálně vypadá.
MelodyCoin bude stringified a naformátován se čtyřmi mezerami:
Ověřte integritu blockchainu
Blockchainy jsou fantastické, protože jakmile je jednou přidán blok, nelze jej upravit, aniž by došlo ke zrušení platnosti zbytku řetězce.
Neexistuje však žádná metoda, jak zkontrolovat integritu našeho blockchainu s touto implementací.
Pojďme do našeho blockchainu představit funkci isChainValid. Pokud je řetězec legitimní, vrátí true; jinak vrátí false:
Testování integrity
Nyní můžeme otestovat integritu našeho blockchainu. Pokud to nyní provedeme, potvrdí to, že náš řetěz je pravý.
Pokusme se nyní narušit náš blockchain. Změňme blok 2 a přepišme jeho obsah (předpokládejme, že jsme přenesli 100 mincí místo čtyř).
Když to provedeme, můžeme vidět, že software rozpozná naši snahu zasahovat do řetězce.
Můžete však věřit, že existuje jiný způsob, jak se do toho vměšovat. Změnil jsem obsah v bloku, ale nepřepočítal jsem hash. Můžete tedy zkusit být chytrý a přepočítat hash stejného bloku.
To je vše, co bylo k našemu malému nastavení blockchainu! Umožňuje nám přidávat nové bloky a detekovat manipulaci s daty v řetězci.
S naším malým blockchainem jsou dva problémy, které musíme vyřešit:
- Moderní počítače jsou extrémně rychlé a dokážou do našeho řetězce přidat tisíce bloků během několika sekund. Samozřejmě nechceme, aby někdo spamoval náš blockchain.
- Náš blockchain je stále náchylný k manipulaci. Můžete aktualizovat obsah bloku a pak jednoduše přepočítat hashe (a předchozí hashe) pro všechny následující bloky. I když se s tím poserete, skončíte s legitimním řetězem.
K řešení těchto obav používají blockchainy techniku známou jako „důkaz práce“. Musíte prokázat, že jste použili značné množství výpočetních zdrojů k vytvoření bloku pomocí tohoto přístupu. Tomu se také říká hornictví.
Proof-of-work vyžaduje, aby hash bloku začínal konkrétním počtem nul. Ale jak můžete vědět, zda váš hash vyhovuje tomuto pravidlu?
Obsah bloku určuje jeho hash. Takže vždy získáme stejný hash, pokud nezměníme obsah.
Každý blok by měl mít jako řešení přidanou hodnotu nonce. Toto jsou v podstatě nějaká náhodná data, která můžeme aktualizovat, dokud hash našeho bloku nezačne dostatkem nul. Protože nemůžete změnit výstup hashovací funkce, musíte otestovat spoustu různých kombinací a doufat v to nejlepší.
Představte těžbu blockchainu
Začněme zařazením nonce do naší třídy Block. Nonce je jediná hodnota v našem bloku, kterou můžeme upravit, aby ovlivnila hash bloku.
Nejsme schopni změnit časové razítko nebo data.
Dále napíšeme funkci mineBlock(), která provede skutečnou těžbu bloku. Tato funkce odešle potřebnou obtížnost jako parametr a bude pokračovat v provádění, dokud hash našeho bloku nezačne dostatkem nul.
Právě jsem vytvořil základní smyčku while, která bude běžet, dokud náš hash nezačne s dostatečným počtem nul. Pomocí obtížnosti určíme, kolik nul je potřeba. Při obtížnosti 5 musí náš hash začínat 5 nulami.
Když náš hash neobsahuje dostatek nul, zvedneme nonce o jedna a přepočítáme hash. A pokud najdeme hash, který odpovídá obtížnosti, zalogujeme ho do konzole.
Je tu ještě jedna věc, kterou musíme udělat. V naší metodě vypočístHash ve skutečnosti nebereme v úvahu proměnnou nonce, takže zde je:
Třída blockchainu
Pojďme tento nový přístup otestovat v naší třídě blockchainu a uvidíme, jak to půjde.
Pro začátek definuji obtížnost našeho blockchainu ve funkci Object(). Definujeme ji zde, protože ji můžeme později někde použít.
Funkce addBlock pak musí být upravena tak, aby těžila blok před jeho přidáním do našeho řetězce.
Použijte Blockchain
Nyní pojďme použít náš nový blockchain s algoritmem proof-of-work. Zde přidejte několik příkazů console.log.
Když spustíme tento kód, můžeme pozorovat, že proces těžby již není nijak zvlášť rychlý.
Algoritmu nějakou dobu trvá, než vygeneruje bloky s hashe, které začínají třemi nulami (jak je nakonfigurováno podle obtížnosti).
Takže to byl konec našeho základního nastavení blockchainu.
Můžeme regulovat, jak rychle se do našeho blockchainu přidávají nové bloky díky mechanismu proof-of-work.
Je to nejvýznamnější bezpečnostní prvek na blockchainech. A teď, když chápete, jak to funguje, začněte vytvářet svůj vlastní!
Napsat komentář