In questa serie di articoli, costruiremo una criptovaluta semplificata basata su una semplice implementazione blockchain in Golang in meno di 5 minuti. devi prima installare Golang per realizzare questo progetto. per l'editor di testo puoi usare qualsiasi cosa, qui utilizzo il codice di Visual Studio.
L'hai installato tu? Va bene, facciamolo!
se hai creato il progetto crea un file main.go . oke passiamo al codice, per prima cosa inizieremo da main.go Iniziamo con la parte struct Block di “blockchain”. Nella blockchain, blocca che memorizzano informazioni preziose. Ad esempio, Bitcoin blocca le transazioni in negozio, l'essenza di qualsiasi criptovaluta. Oltre a ciò, un blocco contiene alcune informazioni tecniche, come la sua versione, il timestamp attuale e l'hash del blocco precedente. In questo articolo non implementeremo il blocco così come è descritto nelle specifiche blockchain o Bitcoin, ne utilizzeremo invece una versione semplificata, che contiene solo informazioni significative. Ecco come appare. qui abbiamo un blocco struct:
tipo Struttura del blocco {timestamp time.Timetransazioni []stringaprevhash []byteHash []byte}
Timestamp
è il timestamp corrente (quando viene creato il blocco), transactions
è l'informazione preziosa effettiva contenuta nel blocco, prevhas
memorizza l'hash del blocco precedente e Hash
è l'hash del blocco. Nelle specifiche Bitcoin Timestamp
, prevhash
e Hash
sono intestazioni di blocco, che formano una struttura dati separata, e transazioni (transaction
nel nostro caso) è una struttura dati separata. Quindi li mescoliamo qui per semplicità.
Allora come calcoliamo gli hash? Il modo in cui vengono calcolati gli hash è una caratteristica molto importante della blockchain, ed è questa caratteristica che rende la blockchain sicura. Il fatto è che calcolare un hash è un'operazione computazionalmente difficile, richiede del tempo anche su computer veloci (ecco perché le persone acquistano potenti GPU per estrarre Bitcoin). Si tratta di un progetto architettonico intenzionale, che rende difficile l'aggiunta di nuovi blocchi, impedendone così la modifica dopo l'aggiunta. Discuteremo e implementeremo questo meccanismo in un prossimo articolo.
Per ora, prenderemo semplicemente i campi del blocco, li concateneremo e calcoleremo un hash SHA-256 sulla combinazione concatenata. Facciamolo dentro Newhash
Metodo:
funz NewHash(time time.Time, transazioni []string, prevhash []byte) []byte {input := append(prevhash, time.String()...)per transazione := intervallo di transazioni {input = append(input, string(runa(transazione))...)}hash := sha256.Sum256(input)restituisce l'hash[:]}
Successivamente, seguendo una convenzione di Golang, implementeremo una funzione che semplificherà la creazione di un blocco e finiremo:
funz Blocchi(transazioni []string, prevhash []byte) *Blocco {currentTime := ora.Ora()ritorna &Blocca{timestamp: ora.Ora{},transazioni: transazioni,prevhash: prevhash,Hash: NewHash(currentTime, transazioni, prevhash),}}
continuiamo a creare una funzione di stampa. la funzione print è utile per stampare il contenuto di ogni blocco che esegue una transazione. ecco il codice:
funz Stampa(blocco *Blocco) {fmt.Printf("ttime: %sn", block.timestamp.String())fmt.Printf("tprevhash: %xn", block.prevhash)fmt.Printf("thash: %xn", blocco.Hash)}
E transazione funzionale per la transazione di stampa:
funzione Transazione(blocco *Blocco) {fmt.Println("tTransazioni:")per i, transazione := range block.transactions {fmt.Printf("tt%v: %qn", i, transazione)}}
dopo che tutte le funzioni richieste sono state completate, la utilizzeremo nella funzione principale:
funzione principale() {ryan := []string{"ryandi ha inviato 50 BTC a Reza"}blocco_1 := Blocchi(ryan, []byte{})fmt.Println("Questo è il nostro primo blocco")Stampa(blocco_1)Transazione (blocco_1)jack := []string{"jack invia 20 BTC a Reynold"}blocco_2 := Blocchi(jack, blocco_1.Hash)fmt.Println("Questo è il nostro secondo blocco")Stampa(blocco_2)Transazione (blocco_2)}
okay, tutto il codice che abbiamo finito di scrivere. eseguiamolo digitando go run main.go nel terminale. Produzione :
Conclusione
Abbiamo costruito un prototipo di blockchain molto semplice: è semplicemente una serie di blocchi, in cui ciascun blocco ha una connessione con quello precedente. La blockchain vera e propria è però molto più complessa. Nella nostra blockchain aggiungere nuovi blocchi è facile e veloce, ma nella blockchain reale l'aggiunta di nuovi blocchi richiede un po' di lavoro: è necessario eseguire alcuni calcoli pesanti prima di ottenere il permesso di aggiungere blocchi (questo meccanismo è chiamato Proof-of-Work). Inoltre, la blockchain è un database distribuito che non ha un unico decisore. Pertanto, un nuovo blocco deve essere confermato e approvato dagli altri partecipanti alla rete (questo meccanismo si chiama consenso). E non ci sono ancora transazioni nella nostra blockchain!
- "
- Tutti
- articolo
- news
- Bitcoin
- blockchain
- BTC
- costruire
- Acquistare
- codice
- computer
- veloce
- Consenso
- testuali
- continua
- criptovaluta
- Corrente
- dati
- Banca Dati
- Design
- editore
- FAST
- caratteristica
- campi
- Nome
- seguire
- modulo
- function
- futuro
- GV
- hash
- qui
- Come
- hr
- HTTPS
- ia
- informazioni
- IP
- IT
- medie
- Rete
- Altro
- Persone
- prevenzione
- progetto
- Proof-of-Work
- gamma
- Correre
- Serie
- Un'espansione
- So
- inizia a
- Tornare al suo account
- negozi
- Consulenza
- tempo
- delle transazioni
- Le transazioni
- W
- Lavora
- scrittura