Geekflare wird von unserem Publikum unterstützt. Es kann sein, dass wir durch den Kauf von Links auf dieser Seite Affiliate-Provisionen verdienen.
Unter Blockchain und Entwicklung Zuletzt aktualisiert: September 24, 2023
Weitergeben:
Invicti Web Application Security Scanner - die einzige Lösung, die eine automatische Überprüfung von Schwachstellen mit Proof-Based Scanning™ ermöglicht.

Wussten Sie, dass Bitcoin auf einer Blockchain aufbaut? Heute werden wir eine Blockchain mit Python von Grund auf aufbauen

Was ist Blockchain?

Im Jahr 2008 wurde das Bitcoin-Papier von einer unbekannten Person oder Gruppe namens Satoshi Nakamoto veröffentlicht. Bitcoin kam als Peer-to-Peer-Version von elektronischem Bargeld auf den Markt, die Transaktionen ohne den Umweg über zentralisierte Institutionen (Banken) ermöglichte. Die meisten Menschen wissen nicht, dass Satoshi in demselben Papier eine verteilte Art der Informationsspeicherung definierte, die heute als Blockchain ist bekannt

Blockchain-Technologie
Blockchain-Technologie

Einfach ausgedrückt ist Blockchain ein gemeinsames, unveränderliches digitales Buch, das Transaktionen über ein dezentrales Computernetzwerk speichert.

Wir können Blockchain in zwei einfache Begriffe unterteilen

  • Block: Ein Bereich, in dem wir Transaktionen speichern
  • Kette: Eine Reihe von verknüpften Datensätzen

Dies definiert Blockchain als eine Kette von verknüpften Blöcken, wobei jeder Block eine mit bestimmten Parametern durchgeführte Transaktion speichert.

Jeder Block baut auf einen anderen Block auf, wodurch eine unumkehrbare Kette von Blöcken entsteht. Mit anderen Worten: Jeder Block hängt von einem anderen ab. So entsteht ein robustes und unveränderliches System, in dem jeder mit den richtigen Berechtigungen die Integrität überprüfen kann.

Blockchain führt eine Reihe interessanter Funktionen ein

  • Unveränderlichkeit der Geschichte
  • Beständigkeit der Informationen
  • Keine Fehler bei gespeicherten Daten

Viele Systeme verlassen sich derzeit auf Blockchain, z.B. Kryptowährungen, Vermögensübertragungen(NFTs) und möglicherweise in naher Zukunft auch Abstimmungen

Es ist erwähnenswert, dass eine Python-Blockchain kein komplexes Programm mit Tausenden von Codezeilen sein muss. Im Kern handelt es sich um eine Liste von Transaktionen, die miteinander verknüpft sind

Dies war natürlich nur eine kurze Erklärung, aber wenn Sie eine vollständige Anleitung wünschen, haben wir ein komplettes Tutorial über Blockchain für Anfänger erstellt. Schauen Sie es sich unbedingt an

Lassen Sie uns ohne weitere Verzögerung eine einfache Blockchain mit Python erstellen

Aufbau einer Blockchain mit Python

Bevor wir beginnen, lassen Sie uns definieren, was wir in diesem Tutorial tun werden

  • Aufbau eines einfachen Blockchain-Systems, geschrieben in Python
  • Verwendung unserer Blockchain mit vordefinierten Transaktionen, die als Strings dargestellt werden
  • Testen Sie die Unveränderlichkeit unserer Blockchain

Wir werden nicht JSON, sondern Python-Listen verwenden. So können wir den Prozess vereinfachen und uns auf die Anwendung der wichtigsten Konzepte einer Blockchain konzentrieren

Was Sie brauchen, um diesem Tutorial zu folgen

Erstellen der Klasse Block

Öffnen Sie Ihren bevorzugten Code-Editor und erstellen Sie eine Datei main.py . Dies wird die Datei sein, mit der wir arbeiten werden.

Importieren Sie jetzt hashlib, ein Modul, mit dem wir einseitig verschlüsselte Nachrichten erstellen können. Mit Kryptographietechniken wie Hashing können Sie mit Blockchain sichere Transaktionen erstellen

Eine Hash-Funktion ist ein Algorithmus, der aus einigen Daten (in der Regel eine verschlüsselte Zeichenkette) eine eindeutige Kennung zurückgibt, die oft als "Digest" oder "Signatur" bezeichnet wird. Dieser letzte Teil ist von entscheidender Bedeutung. Bei einer Hash-Funktion führt ein kleiner Unterschied in der Eingabe zu einer völlig anderen Kennung als Ausgabe. Wir werden dies später in Aktion sehen

Für den Moment importieren Sie einfach das integrierte Modul hashlib

# main.py Datei

""

Eine

 einfache Blockchain in Python

""

import hashlib

Dieses Modul enthält die meisten der Hash-Algorithmen, die Sie benötigen. Denken Sie nur daran, dass wir die Funktion hashlib.sha256() verwendet werden

Kommen wir nun zum GeekCoinBlock, unserem ganz eigenen Blockchain-Namen

class GeekCoinBlock:
    
 def __init__(self, previous_block_hash, transaction_list):

 self.previous_block_hash = previous_block_hash
 self.transaction_list = transaction_list

 self.block_data = f"{' - '.join(transaction_list)} - {previous_block_hash}"
 self.block_hash = hashlib.sha256(self.block_data.encode()).hexdigest()

Ich weiß, dass dies zu einem klobigen Stück Code führen kann. Lassen Sie uns im nächsten Abschnitt jeden Teil aufschlüsseln

GeekCoinBlock Erläuterung

Zunächst erstellen wir eine Klasse namens GeekCoinBlockeine Hülle für Objekte, die bestimmte Eigenschaften (Attribute) und Verhaltensweisen (Methoden) haben werden

Dann definieren wir die Methode __init__ (auch Konstruktor genannt), die jedes Mal aufgerufen wird, wenn ein GeekCoinBlock Objekt erstellt wird

Diese Methode hat drei Parameter

  • selbst (die Instanz des jeweiligen Objekts)
  • vorheriger_block_hash (ein Verweis auf den vorherigen Block)
  • transaktions_liste (eine Liste der im aktuellen Block durchgeführten Transaktionen).

Wir speichern den vorherigen Hash und die Transaktionsliste und erstellen eine Instanzvariable block_data als String. Dies geschieht nicht bei echten Kryptowährungen, bei denen wir diese Art von Daten als einen weiteren Hash speichern, aber der Einfachheit halber speichern wir jeden Block von Daten als String

Schließlich erstellen wir den block_hash, der von anderen Blöcken verwendet wird, um die Kette fortzusetzen. Hier kommt hashlib ins Spiel. Anstatt eine eigene Hash-Funktion zu erstellen, können wir die vorgefertigte sha256 verwenden, um unveränderliche Blöcke zu erstellen

Diese Funktion empfängt kodierte Zeichenketten (oder Bytes) als Parameter. Aus diesem Grund verwenden wir die Methode block_data.encode(). Danach rufen wir hexdigest() auf, um die verschlüsselten Daten im hexadezimalen Format zurückzugeben

Ich weiß, dass dies alles überwältigend sein kann, also lassen Sie uns mit hashlib auf einer Python-Shell spielen

In [1]: import hashlib

In [2]: message = "Python ist toll"

In [3]: h1 = hashlib.sha256(message.encode())

In <x>[4]</x>: h1
Out<x>[4]</x>: <sha256 ... object @ 0x7efcd55bfbf0>

In <x>[5]</x>: h1.hexdigest()
Out<x>[5]</x>: 'a40cf9cca ... 42ab97'

In [6]: h2 = hashlib.sha256(b "Python ist nicht toll")

In <x>[7]</x>: h2
Out<x>[7]</x>: <sha256 ... Objekt @ 0x7efcd55bfc90>

In <x>[8]</x>: h2.hexdigest()
Out<x>[8]</x>: 'fefe510a6a ... 97e010c0ea34'

Wie Sie sehen, kann eine geringfügige Änderung der Eingabe wie "Python ist großartig" in "Python ist nicht großartig" einen völlig anderen Hash ergeben. Das hat alles mit der Integrität der Blockchain zu tun. Wenn Sie eine kleine Änderung in eine Blockchain einführen, wird sich ihr Hash dramatisch verändern. Das ist der Grund, warum das Sprichwort "Man kann eine Blockchain nicht korrumpieren" wahr ist

Verwendung unserer Block-Klasse

Wir werden später eine ganze Blockchain-Klasse erstellen, aber für den Moment verwenden wir unsere Block-Klasse, um eine Kette von Blöcken (Blockchain) zu erstellen

Erstellen Sie in derselben Datei ein paar Transaktionen, die zum Beispiel aus einfachen Strings bestehen, die in Variablen gespeichert sind

class GeekCoinBlock:
 

.

..

t1

= "Noah sendet 5 GC an Mark"

t2

= "Mark sendet 2,3 GC an James"

t3

= "James sendet 4,2 GC an Alisson"

t4

= "Alisson sendet 1,1 GC an Noah"

GC bezieht sich natürlich auf GeekCoin

Erstellen Sie nun den ersten Block unserer Blockchain, indem Sie die Klasse GeekCoinBlock verwenden und seine Attribute ausgeben. Beachten Sie, dass der Parameter vorheriger_Hash des genesis-Blocks (erster Block, der anderen Blöcken vorausgeht) immer eine beliebige Zeichenkette oder ein Hash sein wird, in diesem Fall "firstblock".

block1 = GeekCoinBlock('firstblock', [t1, t2])

print(f "Block 1 Daten: {block1.block_data}")
print(f "Block 1 Hash: {block1.block_hash}")

Dann machen wir dasselbe mit dem zweiten Block, übergeben aber den Hash des ersten Blocks als Argument vorheriger_Hash

block2 = GeekCoinBlock(block1.block_hash, [t3, t4])

print(f "Block 2 Daten: {block2.block_data}")
print(f "Block 2 Hash: {block2.block_hash}")

Lassen Sie uns die Ausgabe, die wir von diesem Code erhalten, ausführen und analysieren. Geben Sie noch einmal in Ihr Terminal ein

❯ python main.py
Block 1 Daten: Noah sendet 5 GC an Mark - Mark sendet 2.3 GC an James - firstblock
Block 1 Hash: 01e4e15242a9601725f4a86ca01fbddaaec7105b442955bb0efcadbfc759806d
Block 2 Daten: James sendet 4.2 GC an Alisson - Alisson sendet 1.1 GC an Noah - 01e4e15242a9601725f4a86ca01fbddaaec7105b442955bb0efcadbfc759806d
Block 2 Hash: 448c4306caf7f6937b0307f92f27fbea3bb73b3470363dee5026a1209dadcfa8

Im Moment sehen Sie nur Text und einige 64-Zeichen-Hashes, aber das entspricht ziemlich genau dem Mechanismus einer Blockchain

Sie beginnen mit einem Genesis-Block, der die Grundlage für alle anderen Blöcke bildet

Jeder kann die Integrität der Kette überprüfen, und deshalb ist eine Blockchain ein so sicheres System. Wenn wir zum Beispiel den Inhalt einer Transaktion leicht verändern, sagen wir

t2 = "Mark sendet 2,3 GC an James" -> t2 = "Mark sendet 3,2 GC an James" 

Wir sehen eine dramatische Veränderung im Hash der Blöcke

Block 1 Daten: Noah sendet 5 GC an Mark - Mark sendet 3.2 GC an James - firstblock
Block 1 Hash: 7a990bf1d70230bf2dad6160496c0b3046da7a17b1281fd1d4c63d4eac58e78c
Block 2 Daten: James sendet 4.2 GC an Alisson - Alisson sendet 1.1 GC an Noah - 7a990bf1d70230bf2dad6160496c0b3046da7a17b1281fd1d4c63d4eac58e78c
Block 2 Hash: 569b977306ce88b53e001dca7ba00c03a51c60d6df4650e7657dcd136f2da0ac

Sie können das aktuelle Projekt in diesem GitHub Repo siehe

Kodierung einer Blockchain

Es ist nicht besonders clever, die Integrität unseres Systems auf handcodierte Variablen zu stützen.

Wir haben die Blöcke. Es ist an der Zeit, eine Klasse zu erstellen, die sie zu einer Blockchain zusammenfügt

Beginnen wir damit, unsere vorherigen Transaktionen und Blockobjekte zu löschen und dann den folgenden Code zu verwenden

# main.py

class Blockchain:
 def __init__(self):
 self.chain = []
 self.generate_genesis_block()

 def generate_genesis_block(self):
 self.chain.append(GeekCoinBlock("0", ['Genesis Block']))
    
 def create_block_from_transaction(self, transaction_list):
 previous_block_hash = self.last_block.block_hash
 self.chain.append(GeekCoinBlock(previous_block_hash, transaction_list))

 def display_chain(self):
 for i in range(len(self.chain)):
 print(f "Daten {i 1}: {self.chain<x>[i]</x>.block_data}")
 print(f "Hash {i 1}: {self.chain<x>[i]</x>.block_hash}\n")

 @property
 def last_block(self):
 return self.chain[-1]

Dies ist wieder ein riesiges Stück Code. Lassen Sie uns jeden Teil aufschlüsseln

  • self.chain - Die Liste, in der alle Blöcke aufgezeichnet sind. Wir können auf jeden Block über Listenindizes zugreifen.
  • generate_genesis_block - Hängt den genesis oder ersten Block an die Kette an. Der vorherige Hash des Blocks ist "0", und die Liste der Transaktionen ist einfach "Genesis Block".
  • create_block_from_transaction - Damit können wir Blöcke an die Kette anhängen, die nur eine Liste von Transaktionen enthalten. Es wäre sehr lästig, jedes Mal einen Block manuell zu erstellen, wenn wir eine Transaktion aufzeichnen wollen.
  • display_chain - Gibt die Kette der Blöcke mit einer for-Schleife aus
  • letzter_block - Eine Eigenschaft, mit der wir auf das letzte Element der Kette zugreifen können. Wir haben sie mit der Methode create_block_from_transaction verwendet.

Lassen Sie uns diese Blockchain testen

# main.py

import hashlib

class GeekCoinBlock:
...


class Blockchain:
...

t1 = "George sendet 3.1 GC an Joe"
t2 = "Joe sendet 2.5 GC an Adam"
t3 = "Adam sendet 1.2 GC an Bob"
t4 = "Bob sendet 0.5 GC an Charlie"
t5 = "Charlie sendet 0.2 GC an David"

t6 = "

David sendet 0,1 GC an Eric"

myblockchain = Blockchain()

myblockchain.create_block_from_transaction([t1, t2])
myblockchain.create_block_from_transaction([t3, t4])
myblockchain.create_block_from_transaction([t5, t6])

myblockchain.display_chain()

Führen Sie nun die Datei main.py aus

Daten 1: Genesis Block - 0
Hash 1: 39331a6a2ea1cf31a5014b2a7c9e8dfad82df0b0666e81ce04cf8173cc5aed3e

Daten 2: George sendet 3.1 GC an Joe - Joe sendet 2.5 GC an Adam - 39331a6a2ea1cf31a5014b2a7c9e8dfad82df0b0666e81ce04cf8173cc5aed3e
Hash 2: 98cf363aecb33989aea0425a3c1287268bd86f63851bc08c0734a31db08506d5

Daten 3: Adam sendet 1.2 GC an Bob - Bob sendet 0.5 GC an Charlie - 98cf363aecb33989aea0425a3c1287268bd86f63851bc08c0734a31db08506d5
Hash 3: 6f1cfcc3082488b97db8fdf8ed33f9ac7519be3e285a37a6fcc2f1904f373589

Data 4: Charlie sendet 0.2 GC an David - David sendet 0.1 GC an Eric - 6f1cfcc3082488b97db8fdf8ed33f9ac7519be3e285a37a6fcc2f1904f373589

Raute

4: 869df2f03c9860767d35b30a46233fbeea89a3000ae5019d1491e3829d1ab929

Herzlichen Glückwunsch! 🙌 Sie haben gerade eine einfache Python-Blockchain von Grund auf erstellt

Sie können nun die Unveränderlichkeit der Blockchain durch die Verwendung von Gettern und Settern verstärken und andere Funktionen wie Proof-of-Work, Bergbau oder andere Konzepte implementieren, die wir im Artikel Grundlagen des Bitcoin-Minings erläutert haben

Fazit

Blockchain ist die Technologie hinter Bitcoin, Etherium und jede andere Kryptowährung. In diesem Artikel haben Sie gelernt, wie Sie eine Blockchain mit Python erstellen können, indem Sie Hash-Algorithmen wie sha256, Klassen und Objekte verwenden

Ihre Aufgabe ist es, ein Mining-System zu erstellen und warum nicht, es mit einer REST-API unter Verwendung von Frameworks wie Django oder Flachmann zu implementieren

Viele Menschen machen ein Vermögen mit Kryptowährungen. Stellen Sie sich nur einmal vor, was Sie erreichen könnten, wenn Sie selbst ein solches System erstellen. 🤑

Programmieren Sie weiter! 👨‍💻

  • Daniel Diaz
    Autor
Dank an unsere Sponsoren
Energie für Ihr Unternehmen
Einige der Tools und Dienste, die Ihr Unternehmen beim Wachstum unterstützen.
  • Invicti nutzt das Proof-Based Scanning™, um die identifizierten Schwachstellen automatisch zu überprüfen und innerhalb weniger Stunden verwertbare Ergebnisse zu erzielen.
    Versuchen Sie Invicti
  • Web Scraping, Residential Proxy, Proxy Manager, Web Unlocker, Search Engine Crawler und alles, was Sie zum Sammeln von Webdaten benötigen.
    Versuchen Sie Brightdata
  • Monday.com ist ein All-in-One-Betriebssystem, mit dem Sie Projekte, Aufgaben, Arbeit, Vertrieb, CRM, Arbeitsabläufe und vieles mehr verwalten können.
    Versuch Montag
  • Intruder ist ein Online-Schwachstellen-Scanner, der Schwachstellen in Ihrer Infrastruktur aufspürt, um kostspielige Datenschutzverletzungen zu vermeiden.
    Versuchen Sie Intruder