Articolo originale: How does blockchain really work? I built an app to show you.
di Sean Han
Secondo Wikipedia, una blockchain è:
Un database distribuito utilizzato per mantenere un elenco di record in continua crescita, chiamati blocchi .
Sembra carino, ma come funziona?
Per illustrare una blockchain, utilizzeremo un'interfaccia a riga di comando open source chiamata Blockchain CLI .
Ho anche creato una versione basata su browser di questo qui .
Installazione della versione dell'interfaccia della riga di comando
Se non lo hai già fatto, installa Node.js .
Quindi esegui quanto segue nel tuo terminale:
# Clona questo repository
$ git clone https://github.com/seanseany/blockchain-cli
# Vai nel repository
$ cd blockchain-cli
# Installa le dipendenze
$ npm install
# Avvia l'app
$ npm start
Dovresti vedere ? Welcome to Blockchain CLI!
e il prompt blockchain →
pronto a ricevere comandi.
Che aspetto ha un blocco?
Per vedere la tua blockchain attuale, inserisci blockchain
o bc
nel prompt dei comandi. Dovresti vedere un blocco come l'immagine qui sotto.
- Indice (blocco n.): quale blocco è? (Il blocco Genesis ha indice 0)
- Hash: il blocco è valido?
- Hash precedente: il blocco precedente è valido?
- Timestamp: quando è stato aggiunto il blocco?
- Dati: quali informazioni sono memorizzate nel blocco?
- Nonce: quante iterazioni abbiamo passato prima di trovare un blocco valido?
Blocco Genesis
Ogni blockchain inizierà con ? Genesis Block.
Come vedrai più avanti, ogni blocco sulla blockchain dipende dal blocco precedente. Quindi, il blocco Genesis è necessario per estrarre il nostro primo blocco.
Cosa succede quando viene estratto un nuovo blocco?
Estraiamo il nostro primo blocco. Digita mine freeCodeCamp♥︎
nel prompt.
La blockchain esamina l'ultimo blocco sulla blockchain per l'indice e l'hash precedente. In questo caso il blocco Genesis è l'ultimo blocco.
- Indice: o+1 = 1
- Hash precedente: 0000018035a828da0…
- Timestamp: quando viene aggiunto il blocco
- Dati: freeCodeCamp❤
- Hash: ??
- Nonce: ??
Come viene calcolato l'hash?
Un valore hash è un valore numerico di lunghezza fissa che identifica i dati in modo univoco.
L'hash viene calcolato prendendo l'indice, l'hash del blocco precedente, il timestamp, i dati del blocco e nonce come input.
CryptoJS.SHA256(index + previousHash + timestamp + data + nonce)
L'algoritmo SHA256 calcolerà un hash univoco, dati questi input. Gli stessi input restituiranno sempre lo stesso hash.
Hai notato i quattro 0 iniziali nell'hash del blocco?
I quattro 0 iniziali sono un requisito minimo per un hash valido. Il numero di 0 iniziali richiesti è chiamato difficoltà .
function isValidHashDifficulty(hash, difficulty) {
for (var i = 0, b = hash.length; i < b; i ++) {
if (hash[i] !== '0') {
break;
}
}
return i >= difficulty;
}
Questo è anche noto come il sistema Proof-of-Work .
Cos'è un nonce?
Un nonce è un numero utilizzato per trovare un hash valido.
let nonce = 0;
let hash;
let input;
while(!isValidHashDifficulty(hash)) {
nonce = nonce + 1;
input = index + previousHash + timestamp + data + nonce;
hash = CryptoJS.SHA256(input)
}
Il nonce itera finché l'hash non è valido. Nel nostro caso, un hash valido ha almeno quattro 0 iniziali. Il processo per trovare un nonce che corrisponda a un hash valido è il mining .
All'aumentare della difficoltà, il numero di possibili hash validi diminuisce. Con meno hash validi possibili, ci vuole più potenza di elaborazione per trovare un hash valido.
Perché è importante?
È importante perché mantiene immutabile la blockchain.
Se abbiamo la seguente blockchain A → B → C, e qualcuno vuole cambiare i dati sul Blocco A. Ecco cosa succede:
- Modifiche ai dati sul blocco A.
- L'hash del blocco A cambia perché i dati vengono utilizzati per calcolare l'hash.
- Il blocco A diventa non valido perché il suo hash non ha più quattro 0 iniziali.
- L'hash del blocco B cambia perché l'hash del blocco A è stato utilizzato per calcolare l'hash del blocco B.
- Il blocco B diventa non valido perché il suo hash non ha più quattro 0 iniziali.
- L'hash del blocco C cambia perché l'hash del blocco B è stato utilizzato per calcolare l'hash del blocco C.
- Il blocco C diventa non valido perché il suo hash non ha più quattro 0 iniziali.
L'unico modo per mutare un blocco sarebbe minare di nuovo il blocco e tutti i blocchi successivi. Poiché vengono sempre aggiunti nuovi blocchi, è quasi impossibile mutare la blockchain.
Spero che questo tutorial ti sia stato utile!
Se desideri provare una versione web della demo, vai su http://blockchaindemo.io