Wa mir d'Trends vun de leschte Jore kucken, hu mir ëmmer iwwer Blockchain héieren, awer net vill iwwer d'Spezifizitéiten.
Mir sinn all bewosst datt Krypto-Währungen wéi Bitcoin, Ethereum, Dogecoin, Matic, an anerer op Blockchain Technologie vertrauen. Blockchain huet déi bedeitend Eventer gefouert, déi vill Industrien am Joer 2021 revolutionéiert hunn an de Wee fir nei Leeschtungen ausgemaach hunn.
Blockchain ass e Mëttel fir Daten ze späicheren op eng Manéier déi schwéier oder onméiglech ass z'änneren, ze hacken oder ze betruechten. Et ass eng digital Ledger vun Transaktiounen déi duplizéiert a verbreet sinn iwwer de ganze Blockchain Netzwierk vu Computersystemer.
Et ass déi banebriechend Datebanktechnologie déi praktesch all Krypto-Währungen dréit. Blockchain mécht et onheemlech schwéier de System ze hacken oder ze fuddelen andeems identesch Kopien vun enger Datebank iwwer e ganzt Netzwierk verbreet.
Wärend Bitcoin elo déi prominentst Notzung fir Blockchain ass, kann d'Technologie eng ganz breet Varietéit vun Uwendungen déngen.
Krypto-Währungen a Blockchaine sinn an de leschte Joeren ëmmer méi populär ginn, an dësen Trend gëtt erwaart weiderzemaachen.
Mir maachen en einfache Blockchain mat JavaScript an dësem Tutorial. Et gëtt Iech e Basisverständnis wéi e Blockchain funktionnéiert.
Loosst eis et MelodyCoin nennen a gitt direkt an d'Aktioun!
E Block erstellen
Fir unzefänken erstellen mir eng nei JavaScript-Datei an där mir all eise Code setzen.
Loosst eis et main.js nennen a fänkt mat enger Beschreiwung un wéi e Blockchain a Blocks solle ausgesinn.
Erstellt eng Blockklass a gitt et eng Funktioun Object () { [native code] } fir unzefänken.
Dir musst en Datum ginn, an den Hash vum fréiere Block wann Dir en neie Block erstellt:
Hei sinn d'Definitioune fir all Immobilie:
- Den Zäitstempel weist wéini de Block gemaach gouf. Dir kënnt all Format benotze wat Dir gewielt hutt (an dësem Fall, en UNIX Zäitstempel).
- All Form vun Donnéeën, déi Dir un dëse Block wëllt verbannen, kann am Dateparameter abegraff ginn. Wann Dir eng Krypto-Währung erstellen wëllt, kënnt Dir Transaktiounsdaten wéi de Sender / Empfänger an d'Quantitéit u Suen heihinner behalen.
- De previousHash ass eng String déi den Hash vum fréiere Block hält. Dëst ass wat d'Kette vu Blocken generéiert, wat kritesch wäert sinn fir d'Integritéit vun eisem Blockchain spéider ze liwweren.
Hashes erstellen
All Block verlinkt op de viregte Block (also déi virdrunHash Eegeschafte). Dat ass, all Block erfuerdert en Hash. En Hash ass ähnlech wéi e Fangerofdrock. Et ass ënnerscheet fir all Block.
Den Hash vun engem Block kann berechent ginn andeems all säin Inhalt duerch eng Hashfunktioun passéiert.
Also, loosst eis ufänken mat enger Funktioun ëmzesetzen déi den Hash vum aktuelle Block berechent.
Also, ënner der Block Klass definéiere mir d'Funktioun calculateHash:
Wéi och ëmmer, den SHA256 Hash gëtt net vu JavaScript ënnerstëtzt a muss vun enger externer Bibliothéik kritt ginn.
Crypto-js ass e fantastesche Package dee sécher Implementatioune vu verschiddenen Hash Algorithmen enthält.
Da kënne mir et an eisen main.js Code importéieren.
Elo datt mir eis calculateHash () Funktioun hunn, loosst eis et an eiser Blockfunktioun benotzen:
Nodeems mir beschreiwen wéi e Block ausgesäit, kënne mir definéieren wéi e Blockchain soll ausgesinn. Also loosst eis eng nei Klass erstellen.
An dësem Szenario ass de Blockchain e ganz einfachen Objet deen eng Immobiliekette huet. Dëst ass eng Array déi all d'Blöcke op der Kette hält.
Ier mir Blocken derbäi kënne, musse mir als éischt erstellen wat als "Genesisblock" bekannt ass. Dëst ass den éischte Block an der Kette, an et ass eenzegaarteg datt et net op e fréiere Block kann weisen (et ass deen éischten!).
Also, fir de Genesis Block ze bauen, addéieren ech eng Funktioun fir eis Klass mam Numm createGenesisBlock (). Zréck an der Funktioun Object() { [native code] } vun eiser Blockchain Klass.
Mir kënnen elo de Genesis Block enthalen wann mir eng nei Blockchain Instanz bauen:
Blockchain Methoden
Elo, loosst eis Methoden un eis Blockchain Klass addéieren, déi eis et erlaben Saachen ze maachen wéi nei Blocks derbäizefügen an dee rezente Block erofhuelen.
D'getLatestBlock Funktioun ass déi meescht Basis. Et gëtt einfach de leschte Member vun der Kettenarray zréck:
D'addBlock Technik ass e bësse méi involvéiert.
Ier mir en neie Block un eis Kette kënne addéieren, musse mir als éischt dat Block säi fréiere Hash Feld passend setzen.
Et muss op den Hash vum kierzlechst addéierte Block an eiser Kette gesat ginn. Mir mussen och den Hash vum neie Block berechnen:
Testen
Loosst eis kucken wéi eis MelodyCoin erauskomm ass.
Erstellt eng Blockchain Instanz fir dëst z'erreechen. Loosst eis e puer méi Blocks derbäi:
Mir hunn do zwee nei Blöcke gemaach. Loosst eis e Bléck kucken wéi eise Blockchain de Moment ausgesäit.
MelodyCoin gëtt stringéiert a formatéiert mat véier Plazen:
Verifizéiert d'Integritéit vum Blockchain
Blockchains si fantastesch well eemol e Block bäigefüügt ass, kann et net geännert ginn ouni de Rescht vun der Kette ongëlteg ze maachen.
Wéi och ëmmer, et gëtt keng Method fir mech d'Integritéit vun eisem Blockchain mat dëser Implementatioun ze kontrolléieren.
Loosst eis eng isChainValid Funktioun fir eis Blockchain aféieren. Wann d'Kette legitim ass, gëtt et richteg zréck; soss gëtt et falsch zréck:
Testen Integritéit
Mir kënnen elo d'Integritéit vun eisem Blockchain op den Test stellen. Wa mir et elo ausféieren, wäert et bestätegen datt eis Kette echt ass.
Loosst eis elo probéieren mat eisem Blockchain ze manipuléieren. Loosst eis de Block 2 änneren an den Inhalt iwwerschreiwe (loosst eis unhuelen datt mir 100 Mënzen amplaz véier iwwerginn hunn).
Wa mir dëst ausféieren, kënne mir gesinn datt d'Software eisen Effort erkennt fir mat der Kette ze manipuléieren.
Wéi och ëmmer, Dir kënnt gleewen datt et eng aner Method ass fir mech mat dësem ze vermëschen. Ech hunn den Inhalt am Block geännert, awer den Hash net ëmberechent. Also kënnt Dir probéieren clever ze sinn an den Hash vun deemselwechte Block nei ze berechnen.
Dat ass alles wat et zu eisem klenge Blockchain Setup war! Et erlaabt eis nei Blocks derbäi ze ginn an Tampere mat Daten an der Kette z'entdecken.
Et ginn zwee Probleemer mat eisem klenge Blockchain, déi mir musse adresséieren:
- Modern Computere sinn extrem séier a kënnen a Sekonnen Dausende vu Blocken un eis Kette addéieren. Mir wëllen offensichtlech net datt iergendeen eis Blockchain spam.
- Eis Blockchain ass nach ëmmer vulnérabel fir Tamperen. Dir kënnt den Inhalt vun engem Block aktualiséieren an dann einfach d'Hashes (a virdrun Hashes) fir all folgend Blocks nei berechnen. Och wann Dir mat et mess, wäert Dir mat enger legitimer Kette ophalen.
Fir dës Bedenken unzegoen, benotze Blockchains eng Technik bekannt als "Beweis vun der Aarbecht." Dir musst weisen datt Dir eng bedeitend Quantitéit u computational Ressourcen benotzt hutt fir e Block mat dëser Approche ze kreéieren. Dëst gëtt och genannt Goldofbau.
Beweis-vun-Aarbecht erfuerdert datt den Hash vun engem Block mat engem spezifesche Betrag vun Nullen ufänkt. Awer wéi kënnt Dir wëssen ob Ären Hash dës Regel passt?
Den Inhalt vun engem Block bestëmmt säin Hash. Also mir kréien ëmmer deeselwechten Hash, virausgesat mir den Inhalt net änneren.
All Block soll en Nonce-Wäert derbäi als Léisung hunn. Dëst sinn am Wesentlechen e puer zoufälleg Donnéeën déi mir kënne aktualiséieren bis den Hash vun eisem Block mat genuch Nullen ufänkt. Well Dir d'Ausgab vun enger Hashfunktioun net verännere kënnt, musst Dir vill verschidde Kombinatioune testen an op dat Bescht hoffen.
Aféierung vum Mining op The Blockchain
Fänke mer un mat engem Nonce an eiser Blockklass opzehuelen. D'Nonce ass den eenzege Wäert an eisem Block dee mir kënne änneren fir den Hash vum Block ze beaflossen.
Mir kënnen den Zäitstempel oder d'Donnéeën net änneren.
Als nächst schreiwen mer eng MineBlock () Funktioun déi den eigentleche Mining vun engem Block mécht. Dës Funktioun gëtt déi néideg Schwieregkeet als Parameter geschéckt a wäert weider ausféieren bis den Hash vun eisem Block mat genuch Nullen ufänkt.
Ech hunn just eng Basis-While-Loop gemaach, déi leeft bis eisen Hash mat genuch Nullen ufänkt. Mir benotzen d'Schwieregkeet fir ze bestëmmen wéivill Nullen gebraucht ginn. Mat enger Schwieregkeet vu 5 muss eisen Hash mat 5 Nullen ufänken.
Wann eisen Hash net genuch Nullen enthält, erhéije mir d'Nonce ëm eng a berechnen den Hash nei. A wa mir en Hash fannen deen der Schwieregkeet entsprécht, logge mir et op d'Konsole.
Do musse mer nach eng Saach maachen. Mir huelen d'nonce Variabel net wierklech an eiser calculateHash Method berücksichtegt, also hei ass et:
Blockchain Class
Loosst eis dës nei Approche op den Test an eiser Blockchain Klass setzen a kucken wéi et geet.
Fir unzefänken, definéieren ech d'Schwieregkeet vun eisem Blockchain an der Funktioun Object (). Mir definéieren et hei well mir et spéider iergendwou benotze kënnen.
D'addBlock Funktioun muss dann geännert ginn sou datt et de Block minéiert ier se an eis Kette bäigefüügt gëtt.
Benotzt de Blockchain
Elo, loosst eis eis nei Blockchain benotze mam Beweis-vun-Aarbecht Algorithmus. Hei füügt e puer console.log Aussoen derbäi.
Wa mir dëse Code ausféieren, kënne mir beobachten datt de Miningprozess net méi besonnesch séier ass.
Et dauert e bëssen Zäit fir den Algorithmus fir Blocks mat Hashes ze generéieren déi mat dräi Nullen ufänken (wéi duerch Schwieregkeet konfiguréiert).
Also dat war d'Enn vun eisem Basis Blockchain Setup.
Mir kënne reguléieren wéi séier nei Blocks zu eisem Blockchain bäigefüügt ginn dank dem Beweis-vun-Aarbechtsmechanismus.
Et ass déi bedeitendst Sécherheetsfeature op Blockchains. An elo wou Dir verstitt wéi et funktionnéiert, fuert weider fir Äert eegent ze kreéieren!
Hannerlooss eng Äntwert