Come costruire una blockchain in JavaScript

Blog

Come costruire una blockchain in JavaScript

Blockchain è tutto il ronzio ora. E per una buona ragione! Un registro pubblico distribuito estremamente sicuro attraverso la crittografia?! Immagina i milioni di casi d'uso applicabili. Una blockchain può essere creata e gestita utilizzando qualsiasi linguaggio moderno.



Ai fini di questo blog, tuffiamoci in una blockchain scritta in JavaScript. Si spera che questo non serva solo come un semplice esempio di codice, ma fornisce anche una comprensione di base di come funziona effettivamente una blockchain.

Creazione di un blocco

Creiamo prima un blocco e gli diamo alcuni attributi.



  • |_+_| – la posizione del blocco sulla blockchain.
  • |_+_| – quando è stato creato il blocco.
  • |_+_| – un tipo di dati da memorizzare sul blocco. Questo potrebbe essere davvero uno scambio di valore. Forse una serie di tipi.
  • |_+_| – hash del blocco precedente. Questo lega un blocco all'altro.
  • |_+_| – funzione hash calcolata utilizzando le proprietà del blocco. Questo è l'identificatore di blocco sulla blockchain. Al momento non sono disponibili funzionalità integrate per le funzioni hash al di fuori di WebCryptoAPI. Ma ci sono molte altre librerie esterne come object-hash, crypto-hs, SJCL, forge SHA-256, ecc.
  • |_+_| – Prova di lavoro
  • |_+_| – Un hash Merkle Root che ospita tutte le transazioni con hash legate a un particolare blocco.
BlockIndex

Notare la proprietà Merkle Root sul blocco. Dato che una transazione ha il proprio hash generato, possiamo creare un Merkle Tree dall'elenco delle transazioni. Questo albero può quindi essere utilizzato per convalidare le transazioni di blocco. Ora che viene generato un blocco, torniamo indietro e guardiamo un oggetto transazione. Questo dovrebbe illustrare che una transazione può essere davvero qualsiasi cosa. È qui che entrano in gioco le numerose applicazioni della blockchain.

Queste particolari operazioni consistono in a



  • ID transazione (id della transazione),
  • inputAccount (mittente),
  • outputAccount (ricevitore),
  • commissione (forse in BTC o in qualsiasi altra valuta),
  • l'importo (importo elaborato),
  • genere,
  • varie (note)
  • timestamp (timestamp della transazione)
  • hash (hash della transazione)

Creazione di un oggetto transazione a blocchi

Ho creato un oggetto transazione di blocco come segue:

BlockCreatedWhen

La catena

Passando alla parte buona, diamo un'occhiata a una blockchain immutabile di base usando i blocchi sopra.

cassa di disoccupazione app cash fallita

Sotto, nel costruttore, noterai una creazione manuale del primo blocco. Questo è necessario per far girare la palla. Ogni catena ha bisogno di un primo anello!

Creiamolo manualmente e diamogli un indice di 0 per mostrare il suo posizionamento sulla catena. Molte funzioni possono essere aggiunte a questa classe per assistere in attività come l'aggiunta di blocchi, il controllo di una catena vuota, l'acquisizione dell'ultimo blocco, la convalida, ecc.

Il processo di creazione di blocchi aggiuntivi può essere complesso e comportare tonnellate di convalida, se necessario. Dobbiamo tenere a mente di rigenerare l'hash se qualsiasi altra proprietà cambia su un blocco.

Per quanto riguarda la validazione della blockchain, per ora ci concentreremo sui blocchi collegati tra loro. Poiché l'indice 0 corrisponde al primo blocco creato manualmente, possiamo saltarlo e controllare l'hash dei blocchi collegati corrispondenti.

BlockTransaction

Aggiunta alla catena

Per questo esempio semplicistico, creiamo 10 blocchi, ciascuno con più transazioni, e aggiungiamoli alla catena.

BlockPreviousHash

Bene, eseguiamo questo ragazzaccio e vediamo la blockchain che abbiamo creato.

Hash

NOTA: all'interno della proprietà merkleTreeRoot, crypto-js utilizza array di parole codificati come UTF-8 quando viene fornita una stringa.

panda dataframe append inplace

Sopra, nota l'hash e |_+_| proprietà di ogni blocco. Questo funge da collegamento per la catena.

Ma cosa succede se si modifica in qualche modo un blocco? Forse modificare la proprietà della commissione o tentare di ricalcolare un hash di blocco?

Nonce

Sembra che la funzione di convalida blockchain |_+_| catturato un tentativo di ricalcolare il suo hash. Naturalmente, questa è una convalida piuttosto semplice, ma serve allo scopo di illustrare la natura sicura della blockchain.

Pensieri finali

In sintesi, una blockchain può essere scritta in varie lingue. Spero che questa versione JavaScript di base non solo lo illustri, ma offra un po' più di panoramica su come funzionano le blockchain.

Grazie per aver letto! Per favore condividi se ti è piaciuto!

#javascript #blockchain #bitcoin #altcoins #geek-cash