Se guardemu à i tendenzi di l'anni precedenti, avemu intesu parlà di blockchain tuttu u tempu, ma micca assai di e specifiche.
Sapemu tutti chì e criptovalute cum'è Bitcoin, Ethereum, Dogecoin, Matic, è altri si basanu in a tecnulugia blockchain. Blockchain hà guidatu l'avvenimenti significativi chì anu rivoluzionatu numerosi industrii in u 2021 è hà apertu a strada per novi rializazioni.
Blockchain hè un mezzu di almacenà dati in una manera chì hè dura o impussibile di edità, pirate, o truffa. Hè un ledger digitale di transazzioni chì sò duplicati è spargugliati in tutta a reta di i sistemi di computer di a blockchain.
Hè a tecnulugia di basa di dati innovativa chì alimenta praticamente tutte e criptovalute. Blockchain rende incredibbilmente difficiuli di pirate o ingannà u sistema sparghjendu copie identiche di una basa di dati in una reta sana.
Mentre Bitcoin hè avà l'usu più prominente per a blockchain, a tecnulugia pò serve una varietà assai larga di applicazioni.
Cryptocurrencies è blockchains sò stati sempri più populari in l'ultimi anni, è sta tendenza hè prevista per continuà.
Facemu una blockchain simplice cù JavaScript in questu tutoriale. Vi darà una cunniscenza basica di cumu funziona una blockchain.
Chjamemu MelodyCoin è entra subitu in l'azzione!
Crià un bloccu
Per principià, creeremu un novu schedariu JavaScript in u quale mettemu tuttu u nostru codice.
Chjamemu main.js è cuminciamu cù una descrizzione di cumu si deve vede un blockchain è i blocchi.
Crea una classa Block è dà una funzione Object () { [codice nativu] } per cumincià.
Avete da dà una data, è l'hash di u bloccu precedente quandu creanu un novu bloccu:
Eccu e definizioni per ogni pruprietà:
- U timestamp indica quandu u bloccu hè statu fattu. Pudete utilizà qualsiasi formatu chì sceglite (in questu casu, un timestamp UNIX).
- Ogni forma di dati chì vulete cunnette à stu bloccu pò esse inclusu in u paràmetru di dati. Se vulete creà una criptocurrency, pudete mantene e dati di transazzione cum'è u mittente / destinatariu è a quantità di soldi mossa quì.
- U precedente Hash hè una stringa chì cuntene l'hash di u bloccu precedente. Questu hè ciò chì generarà a catena di blocchi, chì serà criticu per furnisce l'integrità di a nostra catena di bloccu dopu.
Creazione di Hash
Ogni bloccu ligami à u bloccu precedente (cusì a pruprietà precedente Hash). Vale à dì, ogni bloccu richiede un hash. Un hash hè simile à una impronta digitale. Hè distintu per ogni bloccu.
L'hash di un bloccu pò esse calculatu passendu tuttu u so cuntenutu per una funzione hash.
Allora, cuminciamu à implementà una funzione chì calcula l'hash di u bloccu attuale.
Allora, sottu a classa Block, definiscemu a funzione calculateHash:
Tuttavia, l'hash SHA256 ùn hè micca supportatu da JavaScript è deve esse acquistatu da una biblioteca esterna.
Crypto-js hè un pacchettu fantasticu chì include implementazioni sicure di parechji algoritmi di hash.
Allora pudemu impurtà in u nostru codice main.js.
Avà chì avemu a nostra funzione calculateHash (), mettemu in usu in a funzione di u nostru Block:
Dopu avè descrittu ciò chì pare un Blockchain, pudemu definisce ciò chì un Blockchain deve esse. Allora creamu una nova classe.
In questu scenariu, u blockchain hè un oggettu assai simplice chì hà una catena di pruprietà. Questu hè un array chì cuntene tutti i blocchi nantu à a catena.
Prima di pudè aghjunghje blocchi, avemu prima di creà ciò chì hè cunnisciutu cum'è "bloccu di genesi". Questu hè u primu bloccu in a catena, è hè unicu in quantu ùn pò micca indicà un bloccu prima (hè u primu!).
Allora, per custruisce u bloccu genesi, aghju aghjunghje una funzione à a nostra classa chjamata createGenesisBlock (). Torna in a funzione Object () { [codice nativu] } di a nostra classa Blockchain.
Pudemu avà include u bloccu di genesi ogni volta chì custruemu una nova istanza di Blockchain:
Metodi Blockchain
Avà, aghjustemu metudi à a nostra classe Blockchain chì ci permetterà di fà cose cum'è aghjunghje novi blocchi è piglià u bloccu più recente.
A funzione getLatestBlock hè a più basica. Ritorna simpricimenti u membru finali di a matrice di a catena:
A tecnica addBlock hè un pocu più implicata.
Prima di pudè aghjunghje un novu bloccu à a nostra catena, avemu prima di stabilisce in modu adattatu u campu Hash precedente di quellu bloccu.
Deve esse stabilitu à l'hash di u più recente bloccu aghjuntu à a nostra catena. Avemu ancu bisognu di calculà l'hash di u novu bloccu:
essai
Videmu cumu hè surtitu u nostru MelodyCoin.
Crea una istanza di blockchain per fà questu. Aghjunghjemu un paru di blocchi più:
Avemu fattu dui blocchi novi quì. Fighjemu un'occhiata à ciò chì a nostra blockchain pare attualmente.
MelodyCoin serà stringitu è furmatu cù quattru spazii:
Verificate l'integrità di a Blockchain
Blockchains sò fantastichi perchè una volta chì un bloccu hè statu aghjuntu, ùn pò micca esse mudificatu senza invalidà u restu di a catena.
Tuttavia, ùn ci hè micca un metudu per mè per verificà l'integrità di a nostra blockchain cù questa implementazione.
Introducemu una funzione isChainValid à a nostra blockchain. Se a catena hè legittima, torna vera; altrimenti, tornerà false:
Testa l'integrità
Pudemu avà mette à a prova l'integrità di a nostra blockchain. Se l'eseguimu avà, cunfirmà chì a nostra catena hè genuina.
Pruvemu avà di tamper cù a nostra blockchain. Alteremu u bloccu 2 è soprascrivite u so cuntenutu (supponemu chì avemu trasferitu 100 muniti invece di quattru).
Quandu avemu eseguitu questu, pudemu vede chì u software ricunnosce u nostru sforzu di tamper cù a catena.
Tuttavia, pudete crede chì ci hè un altru mètudu per mè per intruduce in questu. Aghju cambiatu u cuntenutu in u bloccu, ma ùn hà micca ricalculatu l'hash. Allora pudete pruvà à esse intelligente è ricalculate l'hash di quellu stessu bloccu.
Hè tuttu ciò chì ci era in a nostra piccula configurazione di blockchain! Ci permette di aghjunghje novi blocchi è detectà a manipulazione di dati in a catena.
Ci hè dui prublemi cù a nostra piccula blockchain chì duvemu affruntà:
- L'urdinatori muderni sò estremamente veloci è ponu aghjunghje migliaia di blocchi à a nostra catena in sicondi. Ovviamente ùn vulemu chì nimu spamma a nostra blockchain.
- A nostra blockchain hè sempre vulnerabile à a manipulazione. Pudete aghjurnà u cuntenutu di un bloccu è dopu simpricimenti ricalculate l'hash (è l'hash precedente) per tutti i blocchi seguenti. Ancu s'ellu si mette cun ellu, vi finiscinu cù una catena legittima.
Per affruntà queste preoccupazioni, i blockchains utilizanu una tecnica chjamata "prova di travagliu". Duvete dimustrà chì avete utilizatu una quantità significativa di risorse computazionali per creà un bloccu utilizendu stu approcciu. Questu hè ancu chjamatu minieri.
A prova di travagliu richiede chì l'hash di un bloccu principia cù una quantità specifica di zeri. Ma cumu pudete sapè se u vostru hash si adatta à sta regula?
U cuntenutu di un bloccu determina u so hash. Dunque ottenemu sempre u listessu hash, sempre chì ùn mudificà micca u cuntenutu.
Ogni bloccu deve avè un valore di nonce aghjuntu à questu cum'è suluzione. Questu hè essenzialmente qualchi dati aleatorii chì pudemu aghjurnà finu à chì l'hash di u nostru bloccu principia cù abbastanza zeri. Perchè ùn pudete micca cambià l'output di una funzione di hash, avete da pruvà parechje cumminazzioni diffirenti è sperate per u megliu.
Introduce a Mining à The Blockchain
Cuminciamu includendu un nonce in a nostra classe Block. U nonce hè u valore unicu in u nostru bloccu chì pudemu mudificà per impactà l'hash di u bloccu.
Ùn pudemu micca cambià u timestamp o i dati.
Dopu, scrivemu una funzione mineBlock() chì farà a minera attuale di un bloccu. Questa funzione serà mandata a difficultà necessaria cum'è un paràmetru è cuntinueghja à eseguisce finu à chì l'hash di u nostru bloccu principia cù abbastanza zeri.
Aghju fattu solu un ciclu basicu while chì curria finu à chì u nostru hash principia cù abbastanza zeri. Utilizemu a difficultà per determinà quanti zeri sò necessarii. Cù una difficultà di 5, u nostru hash deve principià cù 5 zeri.
Quandu u nostru hash ùn cuntene abbastanza zeri, alzamu u nonce da unu è ricalculate l'hash. È se truvamu un hash chì currisponde à a difficultà, l'avemu logatu à a cunsola.
Ci hè una cosa più chì avemu da fà. Ùn pigliemu micca veramente a variabile nonce in u nostru metudu calculateHash, dunque quì hè:
Classe Blockchain
Pudemu stu novu approcciu à a prova in a nostra classa di blockchain è vede cumu si passa.
Per principià, aghju definitu a difficultà di a nostra blockchain in a funzione Object (). Definimu quì postu chì pudemu usà in qualchì locu dopu.
A funzione addBlock deve esse mudificata in modu chì mina u bloccu prima di aghjunghje in a nostra catena.
Utilizà u Blockchain
Avà, mettemu a nostra nova blockchain à aduprà cù l'algoritmu di prova di travagliu. Quì, aghjunghje un coppiu di dichjarazioni console.log.
Quandu avemu eseguitu stu codice, pudemu osservà chì u prucessu di minieri ùn hè più particularmente rapidu.
Ci vole un pocu di tempu per l'algoritmu per generà blocchi cù hashes chì cumincianu cù trè zeri (cum'è cunfiguratu da difficultà).
Allora era a fine di a nostra configurazione di basa di blockchain.
Pudemu regulà quantu rapidamente i blocchi novi sò aghjuntu à a nostra blockchain grazia à u mecanismu di prova di travagliu.
Hè a funzione di sicurità più significativa in blockchains. È avà chì avete capitu cumu funziona, fate à creà u vostru propiu!
Lascia un Audiolibro