Moderne Kryptowährungen wie Bitcoin basieren auf dem Prinzip des „Proof of Work“ – einem Verfahren, bei dem Rechenleistung eingesetzt wird, um mathematische Aufgaben zu lösen. Dafür braucht es sogenannte Miner: komplexe Programme, die rund um die Uhr kryptografische Hashfunktionen berechnen.
Ein echtes Mining-Tool wie XMRig oder CGMiner ist jedoch ein hochspezialisiertes Stück Software – geschrieben für Performance, Parallelität und Kompatibilität mit moderner Hardware. Doch was passiert dabei eigentlich unter der Haube?
In diesem Beitrag zeige ich dir ein minimalistisches Python-Beispiel, das den Grundgedanken des Mining-Prozesses mit dem SHA-256-Algorithmus simuliert. Es handelt sich um ein didaktisches Modell – nicht für reales Mining geeignet, aber ideal, um die Grundmechanik von Proof-of-Work zu verstehen.
Schritt 1: Installation von Python 3 und der benötigten Bibliotheken
Zuerst musst du sicherstellen, dass Python und die notwendigen Bibliotheken installiert sind. Für dieses Beispiel verwenden wir die Python-Bibliothek hashlib
, die standardmäßig in Python enthalten ist.
Prüfe ob Python bereits installiert ist.
ython3 --version
Wenn Python bereits installiert ist, sollte die ausgabe in etwa so aussehen:
Python 3.10.4
Wenn nicht, muss Python installiert werden
apt install python3 -y
Schritt 2: Schreiben des Miners
Erstelle eine Datei mit dem Namen simple_miner.py
nano simple_miner.py
Kopiere folgendem Inhalt:
import hashlib
import time
def mine(block_number, transactions, previous_hash, prefix_zeros):
prefix_str = '0' * prefix_zeros
nonce = 0
while True:
text = str(block_number) + transactions + previous_hash + str(nonce)
new_hash = hashlib.sha256(text.encode('utf-8')).hexdigest()
if new_hash.startswith(prefix_str):
print(f"Successfully mined bitcoins with nonce value:{nonce}")
return new_hash
nonce += 1
if __name__ == "__main__":
block_number = 1
transactions = """
Alice pays Bob 2 BTC,
Bob pays Charlie 1 BTC
"""
previous_hash = "0" * 64
prefix_zeros = 4
print("Mining started...")
start_time = time.time()
new_hash = mine(block_number, transactions, previous_hash, prefix_zeros)
total_time = str((time.time() - start_time))
print(f"Mining ended. Total mining time: {total_time} seconds")
print(f"New hash: {new_hash}")
Schritt 3: Ausführen des Programms
- Speichere die Datei
simple_miner.py
. - Starte das Programm:
python3 simple_miner.py
Erklärung des Codes
- hashlib: Wird verwendet, um SHA-256-Hashes zu berechnen.
- mine(): Eine Funktion, die einen einfachen Proof-of-Work-Algorithmus implementiert. Sie versucht, einen Hash zu finden, der mit einer bestimmten Anzahl von Nullen beginnt (
prefix_zeros
). - while True: Schleife, die die Nonce inkrementiert, bis ein gültiger Hash gefunden wird.
- text: Der String, der gehasht wird, besteht aus der Blocknummer, den Transaktionen, dem vorherigen Hash und der Nonce.
- new_hash.startswith(prefix_str): Überprüft, ob der generierte Hash mit der erforderlichen Anzahl von Nullen beginnt.
- Mining starten und Zeit messen: Misst die Zeit, die für den Mining-Prozess benötigt wird, und gibt das Ergebnis aus.
Was du daraus lernst
Wie Proof of Work funktioniert: ein Spiel aus Versuch und Irrtum, bis ein bestimmter Hash gefunden wird.
Die Rolle des Nonce als einziger veränderlicher Wert, um neue Hashes zu erzeugen.
Wie sich Schwierigkeit (difficulty) durch die Anzahl der führenden Nullen im Hash ausdrückt.
Warum echtes Mining Hardware-optimierte Software benötigt (z. B. C++ statt Python, Parallelisierung, GPU/ASIC-Einsatz).