Erstellen Sie Ihre eigene Blockchain
📖 12 Min. gelesen · 🐍 Python
Quick Answer
Der beste Weg, eine Blockchain zu verstehen, besteht darin, eine zu erstellen. In etwa 50 Python-Zeilen können Sie eine funktionierende Spielzeug-Blockchain mit Hashing, einer Blockkette, Proof-of-Work-Mining und Manipulationserkennung erstellen – dieselben Kernideen, die Bitcoin sichern. Keine Blockchain-Vorkenntnisse erforderlich.
⚠️ Dies ist ein Lernmodell, kein Produktionscode. Es lehrt die Datenstruktur hinter Bitcoin – es ist kein sicheres Geld und sollte niemals einen echten Wert haben.
Schritt 1 – Ein Block und sein Fingerabdruck
Ein Block enthält einige Daten (Transaktionen), einen Link zum vorherigen Block und eine „Nonce“ (eine Zahl, die wir ändern können). Seine Identität ist ein SHA-256-Hash aller Inhalte – ändern Sie ein Zeichen und der Hash ändert sich vollständig. Dieser Hash ist der manipulationssichere Fingerabdruck des Blocks.
import hashlib, json, time
class Block:
def __init__(self, index, transactions, previous_hash, nonce=0):
self.index = index
self.timestamp = time.time()
self.transactions = transactions
self.previous_hash = previous_hash
self.nonce = nonce
def hash(self):
# A block's fingerprint = SHA-256 of all its contents.
payload = json.dumps({
"index": self.index,
"timestamp": self.timestamp,
"transactions": self.transactions,
"previous_hash": self.previous_hash,
"nonce": self.nonce,
}, sort_keys=True).encode()
return hashlib.sha256(payload).hexdigest()Schritt 2 – Bergbau (Arbeitsnachweis)
Beim Mining geht es darum, einen Hash zu finden, der einer Regel entspricht – hier beginnend mit einer festgelegten Anzahl von Nullen. Es gibt keine Formel; Sie erzwingen die Nonce brutal, bis der Hash passt. Das Prüfen einer Lösung geht schnell, aber das Finden einer Lösung erfordert Arbeit. Diese Asymmetrie ist das Herzstück von Proof of Work.
DIFFICULTY = 4 # require this many leading zeros
def mine(block):
# Proof of Work: keep changing the nonce until the hash
# starts with DIFFICULTY zeros. There is no shortcut —
# you just have to guess, which is what costs energy.
target = "0" * DIFFICULTY
while not block.hash().startswith(target):
block.nonce += 1
return block.hash()Schritt 3 – Verketten der Blöcke
Jeder neue Block speichert den Hash des vorherigen und fügt sie zu einer Kette zusammen, die mit einem hartcodierten „Genesis“-Block beginnt. Da sich jeder Block an den vorherigen bindet, ist die Reihenfolge festgelegt und der Verlauf miteinander verknüpft.
class Blockchain:
def __init__(self):
# The genesis block — the very first, hard-coded block.
genesis = Block(0, [{"note": "genesis"}], "0")
mine(genesis)
self.chain = [genesis]
def add_block(self, transactions):
prev = self.chain[-1]
block = Block(len(self.chain), transactions, prev.hash())
mine(block) # do the work
self.chain.append(block)
return blockSchritt 4 – Validierung der Kette
Um einer Kette zu vertrauen, überprüfen Sie sie erneut: Jeder Block muss auf den echten Hash des vorherigen Blocks verweisen und jeder Block muss die Proof-of-Work-Regel erfüllen. Wenn eine der Prüfungen irgendwo fehlschlägt, ist die Kette ungültig.
def is_valid(chain):
for i in range(1, len(chain)):
current, previous = chain[i], chain[i - 1]
# 1) Each block must point to the real hash of the one before it.
if current.previous_hash != previous.hash():
return False
# 2) Each block must satisfy the proof-of-work rule.
if not current.hash().startswith("0" * DIFFICULTY):
return False
return TrueSchritt 5 – Führen Sie es aus und versuchen Sie zu betrügen
Fügen Sie nun ein paar Blöcke hinzu und manipulieren Sie dann eine alte Transaktion. Sobald Sie frühere Daten ändern, stimmt der Hash dieses Blocks nicht mehr mit den Erwartungen des nächsten Blocks überein – und die Validierung gibt sofort „False“ zurück. Dies ist im Grunde der Grund, warum man die Geschichte von Bitcoin nicht stillschweigend umschreiben kann.
bc = Blockchain()
bc.add_block([{"from": "Alice", "to": "Bob", "amount": 5}])
bc.add_block([{"from": "Bob", "to": "Carol", "amount": 2}])
print("Chain valid?", is_valid(bc.chain)) # True
# Now try to cheat: tamper with an old transaction.
bc.chain[1].transactions[0]["amount"] = 5000
print("Chain valid?", is_valid(bc.chain)) # False — tampering is caught!🔑 Schlüssel zum Mitnehmen
Eine Blockchain besteht nur aus Datenstrukturen und Regeln: Hashen Sie jeden Block, verknüpfen Sie ihn mit dem letzten und machen Sie das Hinzufügen von Blöcken per Proof-of-Work kostspielig. Manipulationen unterbrechen die Hash-Kette – genau so bleibt Bitcoin ohne zentrale Autorität manipulationssicher.
Was echter Bitcoin hinzufügt
Unsere Spielzeugkette lehrt das Skelett. Real Bitcoin fügt ein globales Peer-to-Peer-Netzwerk von Knoten, digitale Signaturen, die beweisen, wer Münzen ausgeben kann, eine automatische Schwierigkeitsanpassung, das UTXO-Modell, Blockbelohnungen und Halbierungen sowie die Konsensregeln hinzu, die es Fremden ermöglichen, ohne Vertrauen zuzustimmen. Entdecken Sie jeden einzelnen in unseren Erklärungen unten.
Häufig gestellte Fragen
Ist das eine echte Blockchain wie Bitcoin?▼
Es handelt sich um ein vereinfachtes Lehrmodell, das die Kernideen von Bitcoin – Hashing, Chaining und Proof-of-Work – teilt, aber die Vernetzung, digitale Signaturen und wirtschaftlichen Anreize außer Acht lässt, die Bitcoin auf globaler Ebene sicher machen. It is for learning, not for running money.
Muss ich Programmierer sein?▼
Grundkenntnisse in Python sind hilfreich, aber die Erklärungen sind so geschrieben, dass jeder der Logik folgen kann. Sie können es lesen, um die Konzepte zu verstehen, auch ohne den Code auszuführen.
Warum werden beim Mining nur Nullen hinzugefügt?▼
Die Anforderung, dass der Hash mit einer Reihe von Nullen beginnen muss, ist eine leicht zu überprüfende, aber schwer zu findende Bedingung. Die einzige Möglichkeit, einen gültigen Hash zu finden, besteht darin, weiter zu raten (die Nonce zu ändern), und genau aus diesem Grund kostet echtes Mining Energie.
Was fehlt im Vergleich zu echtem Bitcoin?▼
Ein echtes Netzwerk aus Knoten, digitalen Signaturen zum Nachweis des Eigentums, einem Peer-to-Peer-Protokoll, Schwierigkeitsanpassung, dem UTXO-Modell und Blockbelohnungen. In diesem Tutorial lernen Sie die Datenstruktur. Das vollständige System finden Sie in unseren Erklärungen.