Vom Hash zur Blockchain: Grundlegendes SHA-256-Mining in Code

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.

Wenn Python bereits installiert ist, sollte die ausgabe in etwa so aussehen:

Python 3.10.4

Wenn nicht, muss Python installiert werden

Schritt 2: Schreiben des Miners

Erstelle eine Datei mit dem Namen 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

  1. Speichere die Datei simple_miner.py.
  2. Starte das Programm:

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).

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Datenschutz-Übersicht

Diese Website verwendet Cookies, damit wir dir die bestmögliche Benutzererfahrung bieten können. Cookie-Informationen werden in deinem Browser gespeichert und führen Funktionen aus, wie das Wiedererkennen von dir, wenn du auf unsere Website zurückkehrst, und hilft unserem Team zu verstehen, welche Abschnitte der Website für dich am interessantesten und nützlichsten sind.