As wy nei de trends fan 'e foargeande jierren sjogge, hawwe wy de hiele tiid heard oer blockchain, mar net folle oer de spesifiken.
Wy binne ús allegear bewust dat cryptocurrencies lykas Bitcoin, Ethereum, Dogecoin, Matic, en oaren fertrouwe op blockchain technology. Blockchain liede de wichtige barrens dy't ferskate yndustryen yn 2021 revolúsjonearre en it paad foar nije prestaasjes ferhurde.
Blockchain is in middel om gegevens op te slaan op in manier dy't dreech of ûnmooglik is om te bewurkjen, te hacken of te swindle. It is in digitale ledger fan transaksjes dy't duplikearre en ferspraat binne oer it heule netwurk fan kompjûtersystemen fan 'e blockchain.
It is de baanbrekkende databanktechnology dy't praktysk alle cryptocurrencies oandriuwt. Blockchain makket it ongelooflijk lestich om it systeem te hacken of te cheat troch identike kopyen fan in databank oer in hiele netwurk te fersprieden.
Wylst Bitcoin no it meast promininte gebrûk is foar blockchain, kin de technology in heul breed ferskaat oan applikaasjes tsjinje.
Krypto-faluta en blockchains binne de lêste jierren hieltyd populêrder wurden, en dizze trend wurdt ferwachte om troch te gean.
Wy sille in ienfâldige blockchain meitsje mei JavaScript yn dizze tutorial. It sil jo in basisbegryp jaan fan hoe't in blockchain wurket.
Litte wy it MelodyCoin neame en meidwaan oan 'e aksje!
It meitsjen fan in blok
Om te begjinnen, meitsje wy in nij JavaScript-bestân wêryn wy al ús koade pleatse.
Litte wy it main.js neame en begjinne mei in beskriuwing fan hoe't in blockchain en blokken derút moatte sjen.
Meitsje in Block-klasse en jou it in funksje Object () { [native code] } om te begjinnen mei.
Jo moatte in datum jaan, en de hash fan it foarige blok by it meitsjen fan in nij blok:
Hjir binne de definysjes foar elk eigendom:
- It tiidstempel jout oan wannear't it blok makke is. Jo kinne elk formaat brûke dat jo kieze (yn dit gefal in UNIX-tiidstempel).
- Elke foarm fan gegevens dy't jo wolle ferbine mei dit blok kin opnommen wurde yn 'e gegevensparameter. As jo in cryptocurrency wolle oanmeitsje, kinne jo transaksjegegevens hâlde, lykas de stjoerder/ûntfanger en it bedrach jild dat hjir is ferpleatst.
- De previousHash is in tekenrige dy't de hash fan it foarige blok hâldt. Dit is wat de ketting fan blokken sil generearje, dy't kritysk sil wêze by it leverjen fan de yntegriteit fan ús blockchain letter.
Hashes oanmeitsje
Elk blok keppelet nei it foargeande blok (dus de foarigeHash-eigenskip). Dat is, elk blok fereasket in hash. In hash is gelyk oan in fingerprint. It is ûnderskieden foar elk blok.
De hash fan in blok kin wurde berekkene troch al syn ynhâld troch in hashfunksje troch te jaan.
Dat, lit ús begjinne mei it ymplementearjen fan in funksje dy't de hash fan it hjoeddeistige blok berekkent.
Dat, ûnder de klasse Block, definiearje wy de funksje calculateHash:
De SHA256-hash wurdt lykwols net stipe troch JavaScript en moat wurde krigen fan in eksterne bibleteek.
Crypto-js is in fantastysk pakket dat feilige ymplemintaasjes fan ferskate hash-algoritmen omfettet.
Dan kinne wy it ymportearje yn ús main.js-koade.
No't wy ús funksje calculateHash() hawwe, litte wy it brûke yn 'e funksje fan ús Block:
Nei it beskriuwen fan hoe't in blok derút sjocht, kinne wy definiearje hoe't in Blockchain der útsjen moat. Lit ús dus in nije klasse oanmeitsje.
Yn dit senario is de blockchain in heul ienfâldich objekt dat in eigendomketen hat. Dit is in array dy't alle blokken op 'e ketting hâldt.
Foardat wy blokken kinne tafoegje, moatte wy earst meitsje wat bekend is as in "genesisblok." Dit is it earste blok yn 'e keatling, en it is unyk yn dat it kin net wize op in foarôfgeande blok (it is de earste!).
Dat, om it genesisblok te bouwen, sil ik in funksje tafoegje oan ús klasse mei de namme createGenesisBlock (). Werom yn 'e funksje Object () { [native code] } fan ús Blockchain-klasse.
Wy kinne no it genesisblok opnimme as wy in nije Blockchain-eksimplaar bouwe:
Blockchain metoaden
Litte wy no metoaden tafoegje oan ús Blockchain-klasse wêrtroch wy dingen kinne dwaan lykas nije blokken tafoegje en it meast resinte blok ophelje.
De funksje getLatestBlock is de meast basale. It jout gewoan it lêste lid fan 'e kettingarray werom:
De addBlock-technyk is in bytsje mear belutsen.
Foardat wy in nij blok kinne tafoegje oan ús ketting, moatte wy earst it foarige Hash-fjild fan dat blok passend ynstelle.
It moat wurde ynsteld op de hash fan it meast resint tafoege blok oan ús ketting. Wy moatte ek de hash fan it nije blok berekkenje:
testing
Litte wy sjen hoe't ús MelodyCoin útkaam is.
Meitsje in blockchain-eksimplaar om dit te berikken. Litte wy noch in pear blokken tafoegje:
Wy hawwe dêr twa nije blokken makke. Litte wy efkes sjen hoe't ús blockchain der op it stuit útsjocht.
MelodyCoin sil stringified en opmakke wurde mei fjouwer spaasjes:
Ferifiearje de yntegriteit fan 'e Blockchain
Blockchains binne fantastysk, om't ienris in blok is tafoege, it kin net wizige wurde sûnder de rest fan 'e keten ûnjildich te meitsjen.
D'r is lykwols gjin metoade foar my om de yntegriteit fan ús blockchain te kontrolearjen mei dizze ymplemintaasje.
Litte wy in isChainValid-funksje yntrodusearje oan ús blockchain. As de ketting is legitime, it sil weromkomme wier; oars sil it falsk weromkomme:
Testing yntegriteit
Wy kinne no de yntegriteit fan ús blockchain op 'e test sette. As wy it no útfiere, sil it befestigje dat ús ketting echt is.
Lit ús no besykje te manipulearjen mei ús blockchain. Litte wy blok 2 feroarje en de ynhâld oerskriuwe (litte ús oannimme dat wy 100 munten oerdroegen hawwe ynstee fan fjouwer).
As wy dit útfiere, kinne wy sjogge dat de software ús poging erkent om de ketting te manipulearjen.
Jo kinne lykwols leauwe dat d'r in oare metoade is om my hjirmei te bemuoien. Ik feroare de ynhâld yn it blok, mar haw de hash net opnij berekkene. Dat jo kinne besykje tûk te wêzen en de hash fan datselde blok opnij te berekkenjen.
Dat is alles wat der wie foar ús lytse blockchain-opset! It stelt ús yn steat om nije blokken ta te foegjen en manipulaasje te detektearjen mei gegevens binnen de keten.
D'r binne twa problemen mei ús lytse blockchain dy't wy moatte oanpakke:
- Moderne kompjûters binne ekstreem fluch en kinne tûzenen blokken tafoegje oan ús ketting yn sekonden. Wy wolle fansels net dat ien ús blockchain spamt.
- Us blockchain is noch kwetsber foar manipulaasje. Jo kinne de ynhâld fan in blok bywurkje en dan gewoan de hashes (en eardere hashes) opnij berekkenje foar alle folgjende blokken. Sels as jo dermei rommelje, sille jo einigje mei in legitime ketting.
Om dizze soargen oan te pakken, brûke blockchains in technyk bekend as "bewiis fan wurk." Jo moatte bewize dat jo in signifikante hoemannichte berekkeningsboarnen hawwe brûkt om in blok te meitsjen mei dizze oanpak. Dit wurdt ek neamd mynbou.
Proof-of-work fereasket dat de hash fan in blok begjint mei in spesifyk oantal nullen. Mar hoe kinne jo witte oft jo hash past by dizze regel?
De ynhâld fan in blok bepaalt syn hash. Sa krije wy altyd deselde hash, op betingst dat wy de ynhâld net wizigje.
Elts blok moat hawwe in nonce wearde tafoege oan it as in oplossing. Dit is yn wêzen wat willekeurige gegevens dy't wy kinne bywurkje oant de hash fan ús blok begjint mei genôch nullen. Om't jo de útfier fan in hashfunksje net kinne feroarje, moatte jo in protte ferskillende kombinaasjes testje en hoopje op it bêste.
Yntrodusearje Mining oan The Blockchain
Litte wy begjinne mei it opnimmen fan in nonce yn ús Block-klasse. De nonce is de ienige wearde binnen ús blok dy't wy kinne wizigje om de hash fan it blok te beynfloedzjen.
Wy kinne it tiidstempel of de gegevens net feroarje.
Folgjende, litte wy skriuwe in mineBlock () funksje dy't sil dwaan de eigentlike mining fan in blok. Dizze funksje sil de nedige muoite as parameter stjoerd wurde en sil trochgean mei útfiere oant de hash fan ús blok begjint mei genôch nullen.
Ik makke krekt in basis wylst-loop dy't soe rinne oant ús hash begjint mei genôch nullen. Wy brûke de muoite om te bepalen hoefolle nullen nedich binne. Mei in swierrichheid fan 5 moat ús hash begjinne mei 5 nullen.
As ús hash net genôch nullen befettet, ferheegje wy de nons mei ien en berekkenje de hash opnij. En as wy in hash fine dy't oerienkomt mei de swierrichheid, logje wy it oan by de konsole.
Der is noch ien ding dat wy moatte dwaan. Wy nimme de nonce-fariabele net echt yn 'e rekken yn ús calculateHash-metoade, dus hjir is it:
Blockchain klasse
Litte wy dizze nije oanpak op 'e test sette yn ús blockchain-klasse en sjen hoe't it giet.
Om te begjinnen, sil ik de muoite fan ús blockchain definiearje yn 'e funksje Object (). Wy definiearje it hjir, om't wy it letter earne brûke kinne.
De addBlock-funksje moat dan wizige wurde sadat it it blok minent foardat it yn ús keten tafoege wurdt.
Brûk The Blockchain
No litte wy ús nije blockchain brûke mei it proof-of-work-algoritme. Foegje hjir in pear console.log-útspraken ta.
As wy dizze koade útfiere, kinne wy observearje dat it miningproses net mear heul rap is.
It duorret wat tiid foar it algoritme om blokken te generearjen mei hashes dy't begjinne mei trije nullen (lykas ynsteld troch muoite).
Dat wie it ein fan ús basis blockchain-opset.
Wy kinne regelje hoe fluch nije blokken wurde tafoege oan ús blockchain tanksij it proof-of-work-meganisme.
It is de wichtichste befeiligingsfunksje op blockchains. En no't jo begripe hoe't it wurket, gean dan oan it meitsjen fan jo eigen!
Leave a Reply