Si ens fixem en les tendències dels darrers anys, hem sentit parlar de blockchain tot el temps, però no gaire sobre els detalls.
Tots som conscients que les criptomonedes com Bitcoin, Ethereum, Dogecoin, Matic i altres depenen de la tecnologia blockchain. Blockchain va liderar els esdeveniments significatius que van revolucionar nombroses indústries el 2021 i van obrir el camí per a nous èxits.
Blockchain és un mitjà per emmagatzemar dades d'una manera difícil o impossible d'editar, piratejar o estafar. És un registre digital de transaccions que es dupliquen i es distribueixen per tota la xarxa de sistemes informàtics de la cadena de blocs.
És la tecnologia de bases de dades innovadora que alimenta pràcticament totes les criptomonedes. Blockchain fa que sigui increïblement difícil piratejar o enganyar el sistema difonent còpies idèntiques d'una base de dades a tota una xarxa.
Tot i que Bitcoin és ara l'ús més destacat de la cadena de blocs, la tecnologia pot servir per a una varietat molt àmplia d'aplicacions.
Les criptomonedes i les cadenes de blocs han estat cada cop més populars en els últims anys, i s'espera que aquesta tendència continuï.
En aquest tutorial farem una cadena de blocs senzilla amb JavaScript. Us proporcionarà una comprensió bàsica de com funciona una cadena de blocs.
Anomenem-lo MelodyCoin i entrem a l'acció!
Creació d'un bloc
Per començar, crearem un nou fitxer JavaScript en el qual col·locarem tot el nostre codi.
Anomenem-lo main.js i comencem amb una descripció de com haurien de ser una cadena de blocs i els blocs.
Creeu una classe Block i doneu-li una funció Object() { [codi natiu] } per començar.
Heu de donar una data i el hash del bloc anterior quan creeu un bloc nou:
Aquestes són les definicions de cada propietat:
- La marca de temps indica quan es va fer el bloc. Podeu utilitzar qualsevol format que trieu (en aquest cas, una marca de temps UNIX).
- Qualsevol forma de dades que vulgueu connectar a aquest bloc es pot incloure al paràmetre de dades. Si voleu crear una criptomoneda, podeu conservar aquí les dades de la transacció, com ara l'emissor/receptor i la quantitat de diners moguda.
- El previousHash és una cadena que conté el hash del bloc anterior. Això és el que generarà la cadena de blocs, que serà fonamental per proporcionar la integritat de la nostra cadena de blocs més endavant.
Creació de hashes
Cada bloc enllaça amb el bloc anterior (per tant, la propietat previousHash). És a dir, cada bloc requereix un hash. Un hash és semblant a una empremta digital. És diferent per a cada bloc.
El hash d'un bloc es pot calcular passant tot el seu contingut a través d'una funció hash.
Per tant, comencem implementant una funció que calcula el hash del bloc actual.
Per tant, sota la classe Block, definim la funció calculateHash:
Tanmateix, el hash SHA256 no és compatible amb JavaScript i s'ha d'obtenir d'una biblioteca externa.
Crypto-js és un paquet fantàstic que inclou implementacions segures de diversos algorismes hash.
A continuació, el podem importar al nostre codi main.js.
Ara que tenim la nostra funció calculateHash(), anem a utilitzar-la a la funció del nostre bloc:
Després de descriure com és un bloc, podem definir com hauria de ser una cadena de blocs. Així que creem una nova classe.
En aquest escenari, la cadena de blocs és un objecte molt senzill que té una cadena de propietats. Aquesta és una matriu que conté tots els blocs de la cadena.
Abans de poder afegir blocs, primer hem de crear el que es coneix com a "bloc de gènesi". Aquest és el primer bloc de la cadena, i és únic perquè no pot apuntar a un bloc anterior (és el primer!).
Per tant, per construir el bloc genesis, afegiré una funció a la nostra classe anomenada createGenesisBlock (). Torna a la funció Object() { [codi natiu] } de la nostra classe Blockchain.
Ara podem incloure el bloc de gènesi sempre que creem una nova instància de Blockchain:
Mètodes Blockchain
Ara, afegim mètodes a la nostra classe Blockchain que ens permetran fer coses com afegir nous blocs i obtenir el bloc més recent.
La funció getLatestBlock és la més bàsica. Simplement retorna el membre final de la matriu de cadena:
La tècnica addBlock és una mica més complicada.
Abans de poder afegir un bloc nou a la nostra cadena, primer hem d'establir adequadament el camp Hash anterior d'aquest bloc.
S'ha de configurar amb el hash del bloc afegit més recentment a la nostra cadena. També hem de calcular el hash del bloc nou:
Proves
Vegem com ha sortit el nostre MelodyCoin.
Creeu una instància de cadena de blocs per aconseguir-ho. Afegim un parell de blocs més:
Hi hem fet dos blocs nous. Fem una ullada a com és la nostra cadena de blocs actualment.
MelodyCoin es restringirà i es formatarà amb quatre espais:
Verifiqueu la integritat de la cadena de blocs
Les cadenes de blocs són fantàstiques perquè un cop s'ha afegit un bloc, no es pot modificar sense invalidar la resta de la cadena.
Tanmateix, no hi ha cap mètode per comprovar la integritat de la nostra cadena de blocs amb aquesta implementació.
Introduïm una funció isChainValid a la nostra cadena de blocs. Si la cadena és legítima, tornarà veritat; en cas contrari, tornarà false:
Prova d'integritat
Ara podem posar a prova la integritat de la nostra cadena de blocs. Si l'executem ara, confirmarà que la nostra cadena és genuïna.
Ara intentem manipular la nostra cadena de blocs. Anem a modificar el bloc 2 i sobreescriure'n el contingut (suposem que hem transferit 100 monedes en lloc de quatre).
Quan executem això, podem veure que el programari reconeix el nostre esforç per manipular la cadena.
No obstant això, podeu creure que hi ha un altre mètode per a ficar-me en això. Vaig alterar el contingut del bloc però no vaig tornar a calcular el hash. Així que podeu intentar ser intel·ligent i tornar a calcular el hash d'aquest mateix bloc.
Això és tot el que hi havia a la nostra petita configuració de blockchain! Ens permet afegir nous blocs i detectar la manipulació de dades dins de la cadena.
Hi ha dos problemes amb la nostra petita cadena de blocs que hem d'abordar:
- Els ordinadors moderns són extremadament ràpids i poden afegir milers de blocs a la nostra cadena en qüestió de segons. Evidentment, no volem que ningú faci correu brossa a la nostra cadena de blocs.
- La nostra cadena de blocs encara és vulnerable a la manipulació. Podeu actualitzar el contingut d'un bloc i després simplement recalcular els hash (i els hash anteriors) per a tots els blocs següents. Fins i tot si t'hi fiques, acabaràs amb una cadena legítima.
Per abordar aquestes preocupacions, les cadenes de blocs utilitzen una tècnica coneguda com a "prova de treball". Heu de demostrar que heu utilitzat una quantitat important de recursos computacionals per crear un bloc amb aquest enfocament. Això també s'anomena mineria.
La prova de treball requereix que el hash d'un bloc comenci amb una quantitat específica de zeros. Però, com pots saber si el teu hash compleix aquesta regla?
El contingut d'un bloc determina el seu hash. Així que sempre obtenim el mateix hash, sempre que no modifiquem el contingut.
Cada bloc hauria de tenir un valor afegit com a solució. Es tracta bàsicament d'unes dades aleatòries que podem actualitzar fins que el hash del nostre bloc comenci amb prou zeros. Com que no podeu alterar la sortida d'una funció hash, heu de provar moltes combinacions diferents i esperar el millor.
Introdueix la mineria a The Blockchain
Comencem per incloure un nonce a la nostra classe Block. El nonce és l'únic valor dins del nostre bloc que podem modificar per afectar el hash del bloc.
No podem modificar la marca de temps ni les dades.
A continuació, escrivim una funció mineBlock() que farà la mineria real d'un bloc. Aquesta funció rebrà la dificultat necessària com a paràmetre i es continuarà executant fins que el hash del nostre bloc comenci amb prou zeros.
Acabo de fer un bucle while bàsic que s'executaria fins que el nostre hash comenci amb prou zeros. Utilitzem la dificultat per determinar quants zeros es necessiten. Amb una dificultat de 5, el nostre hash ha de començar amb 5 zeros.
Quan el nostre hash no conté prou zeros, augmentem el nonce en un i tornem a calcular el hash. I si trobem un hash que correspon a la dificultat, el registrem a la consola.
Hi ha una cosa més que hem de fer. Realment no tenim en compte la variable nonce al nostre mètode calculateHash, així que aquí està:
Classe Blockchain
Posem a prova aquest nou enfocament a la nostra classe de blockchain i veiem com va.
Per començar, definiré la dificultat de la nostra cadena de blocs a la funció Object(). Ho definim aquí, ja que el podem utilitzar en algun lloc més endavant.
Aleshores, la funció addBlock s'ha de modificar de manera que extraï el bloc abans d'afegir-lo a la nostra cadena.
Utilitzeu la cadena de blocs
Ara, fem servir la nostra nova cadena de blocs amb l'algoritme de prova de treball. Aquí, afegiu un parell de declaracions console.log.
Quan executem aquest codi, podem observar que el procés de mineria ja no és especialment ràpid.
L'algoritme triga un temps a generar blocs amb hash que comencen amb tres zeros (segons el configurat per dificultat).
Així que va ser el final de la nostra configuració bàsica de blockchain.
Podem regular la rapidesa amb què s'afegeixen nous blocs a la nostra cadena de blocs gràcies al mecanisme de prova de treball.
És la funció de seguretat més important de les cadenes de blocs. I ara que entens com funciona, comença a crear el teu!
Deixa un comentari