In dieser Artikelserie erstellen wir in weniger als 5 Minuten eine vereinfachte Kryptowährung, die auf einer einfachen Blockchain-Implementierung in Golang basiert. Sie müssen zuerst Golang installieren, um dieses Projekt zu erstellen. Als Texteditor können Sie alles verwenden, hier verwende ich Visual Studio-Code.
Hast du es installiert? Okay, lass es uns tun!
Wenn Sie das Projekt erstellt haben, erstellen Sie eine Datei main.go . Ok, lass uns programmieren, zuerst beginnen wir mit main.go. Beginnen wir mit dem Strukturblock-Teil von „Blockchain“. In der Blockchain sind es Blöcke, die wertvolle Informationen speichern. Beispielsweise speichern Bitcoin-Blocks Transaktionen, die das Wesen jeder Kryptowährung darstellen. Darüber hinaus enthält ein Block einige technische Informationen, wie seine Version, den aktuellen Zeitstempel und den Hash des vorherigen Blocks. In diesem Artikel werden wir den Block nicht so implementieren, wie er in den Blockchain- oder Bitcoin-Spezifikationen beschrieben ist, sondern stattdessen eine vereinfachte Version davon verwenden, die nur wichtige Informationen enthält. So sieht es aus. Hier haben wir einen Strukturblock:
Typ Blockstruktur {Zeitstempel time.TimeTransaktionen []stringprevhash []byteHash []Byte}
Timestamp
ist der aktuelle Zeitstempel (wenn der Block erstellt wird), transactions
ist die tatsächlich im Block enthaltene wertvolle Information, prevhas
speichert den Hash des vorherigen Blocks und Hash
ist der Hash des Blocks. In der Bitcoin-Spezifikation Timestamp
, prevhash
und Hash
sind Blockheader, die eine separate Datenstruktur bilden, und Transaktionen (transaction
in unserem Fall) ist eine separate Datenstruktur. Der Einfachheit halber mischen wir sie hier.
Wie berechnen wir also die Hashes? Die Art und Weise, wie Hashes berechnet werden, ist ein sehr wichtiges Merkmal der Blockchain, und es ist dieses Merkmal, das die Blockchain sicher macht. Die Sache ist, dass die Berechnung eines Hashs ein rechentechnisch schwieriger Vorgang ist, der selbst auf schnellen Computern einige Zeit in Anspruch nimmt (deshalb kaufen die Leute leistungsstarke GPUs, um Bitcoin zu schürfen). Dabei handelt es sich um einen bewussten architektonischen Entwurf, der das Hinzufügen neuer Blöcke erschwert und so deren Änderung nach dem Hinzufügen verhindert. Wir werden diesen Mechanismus in einem zukünftigen Artikel diskutieren und implementieren.
Im Moment nehmen wir einfach Blockfelder, verketten sie und berechnen einen SHA-256-Hash für die verkettete Kombination. Lass uns das machen Newhash
Verfahren:
func NewHash(time time.Time, Transactions []string, prevhash []byte) []byte {Eingabe := append(prevhash, time.String()...)für Transaktion := Bereichstransaktionen {Eingabe = append(Eingabe, Zeichenfolge(Rune(Transaktion))...)}Hash := sha256.Sum256(Eingabe)Hash zurückgeben[:]}
Als Nächstes implementieren wir einer Golang-Konvention folgend eine Funktion, die die Erstellung eines Blocks vereinfacht und beendet:
func Blocks(transactions []string, prevhash []byte) *Block {currentTime := time.Now()return &Block{Zeitstempel: time.Time{},Transaktionen: Transaktionen,prevhash: prevhash,Hash: NewHash(currentTime, Transactions, Prevhash),}}
Wir erstellen weiterhin eine Druckfunktion. Die Druckfunktion ist nützlich, um den Inhalt jedes Blocks zu drucken, der eine Transaktion ausführt. hier ist der Code:
func Print(block *Block) {fmt.Printf("ttime: %sn", block.timestamp.String())fmt.Printf("tprevhash: %xn", block.prevhash)fmt.Printf("thash: %xn", block.Hash)}
Und Funktionstransaktion für Drucktransaktion:
func Transaction(block *Block) {fmt.Println("tTransactions:")für i, Transaktion := Bereich block.transactions {fmt.Printf("tt%v: %qn", i, Transaction)}}
Nachdem alle erforderlichen Funktionen abgeschlossen sind, verwenden wir es in der Hauptfunktion:
func main () {ryan := []string{"ryandi hat 50 BTC an Reza geschickt"}block_1 := Blocks(ryan, []byte{})fmt.Println("Dies ist unser erster Block")Drucken(block_1)Transaktion(block_1)jack := []string{"jack schicke 20 BTC an Reynold"}block_2 := Blocks(jack, block_1.Hash)fmt.Println("Dies ist unser zweiter Block")Drucken(block_2)Transaktion(block_2)}
Okay, der ganze Code, den wir fertig geschrieben haben. Lassen Sie es uns ausführen, indem Sie im Terminal „go run main.go“ eingeben. Ausgabe :
Zusammenfassung
Wir haben einen sehr einfachen Blockchain-Prototyp erstellt: Es handelt sich lediglich um eine Reihe von Blöcken, wobei jeder Block eine Verbindung zum vorherigen hat. Die eigentliche Blockchain ist jedoch viel komplexer. In unserer Blockchain ist das Hinzufügen neuer Blöcke einfach und schnell, aber in der echten Blockchain erfordert das Hinzufügen neuer Blöcke einige Arbeit: Man muss einige umfangreiche Berechnungen durchführen, bevor man die Erlaubnis zum Hinzufügen von Blöcken erhält (dieser Mechanismus wird Proof-of-Work genannt). Außerdem ist Blockchain eine verteilte Datenbank, die keinen einzigen Entscheidungsträger hat. Daher muss ein neuer Block von anderen Teilnehmern des Netzwerks bestätigt und genehmigt werden (dieser Mechanismus wird als Konsens bezeichnet). Und es gibt noch keine Transaktionen in unserer Blockchain!
- "
- Alle
- Artikel
- Artikel
- Bitcoin
- Blockchain
- BTC
- bauen
- Kaufe
- Code
- Computer
- Verbindung
- Konsens
- Inhalt
- fortsetzen
- kryptowährung
- Strom
- technische Daten
- Datenbase
- Design
- Herausgeber
- FAST
- Merkmal
- Felder
- Vorname
- folgen
- unten stehende Formular
- Funktion
- Zukunft
- GV
- Hash-
- hier
- Ultraschall
- hr
- HTTPS
- ia
- Information
- IP
- IT
- mittlere
- Netzwerk
- Andere
- Personen
- Verhütung
- Projekt
- Arbeitsnachweis
- Angebot
- Führen Sie
- Modellreihe
- Einfacher
- So
- Anfang
- speichern
- Läden
- Technische
- Zeit
- Transaktion
- Transaktionen
- W
- Arbeiten
- Schreiben