Skip to content

Latest commit

 

History

History
61 lines (37 loc) · 1.91 KB

blockchain.md

File metadata and controls

61 lines (37 loc) · 1.91 KB

Blockchain

🎯 Implementiere Deinen eigenen Blockchain-Algorithmus.

Schritt 1

Schreibe eine Funktion, die zufällige Transaktionen im Format (name1, name2, betrag) generiert.

Wir möchten diese Transaktionen fälschungssicher speichern, also so, dass sie nachträglich möglichst schwer zu manipulieren sind.

Schritt 2

Definiere einen Datentyp "Block", der folgendes enthält:

  • Den Hash eines vorhergehenden Blocks
  • Einige Transaktionen
  • Eine Prüfsumme (eine beliebige Zahl oder einen String)

Schritt 3

Schreibe eine Funktion, die aus allen Eigenschaften eines Blocks einen Hash berechnet. Repräsentiere dazu den gesamten Block als String. Verwende die Hash-Funktion sha256:

import hashlib

h = hashlib.sha256()
h.update(text.encode())
print(h.hexdigest())

Schritt 4

Lege die Blockchain als leere Liste an.

Erzeuge den ersten Block, den "Genesis-Block". Verwende 'genesis' als vorangegangenen Hash. Plaziere einige zufällige Transaktionen im Block.

Finde eine Prüfsumme, so dass der sha256-hexdigest mit vier Nullen (0000) endet. Du musst eventuell viele Prüfsummen ausprobieren.

Füge den fertigen Block an die Blockchain an.

Schritt 5

Erzeuge den zweiten Block:

  • Der Hash ist der hexdigest des vorangegangenen Blocks
  • Füge weitere Transaktionen hinzu.
  • Finde wieder eine Prüfsumme, die einen hexdigest mit vier Nullen am Ende erzeugt.
  • Füge den fertigen Block der Blockchain hinzu.

Schritt 6

Erzeuge weitere Blöcke.

Fragen

  • Was passiert, wenn die Anzahl notwendiger Nullen im Hexdigest auf 2 oder 6 gesetzt wird?
  • Was passiert, wenn jemand eine Transaktion im Genesis-Block verändert?
  • Wodurch wird die Blockchain fälschungssicher?
  • Wie ließe sich eine Blockchain dennoch fälschen?
  • Warum nennt man das Finden der Prüfsumme auch "proof of work"?
  • Warum sind in einer Blockchain mehrere Rechner beteiligt?
  • Was ist ein *"Konsens-Algorithmus"?