Lässt es sich mit cremefarbenem Papier, einer Tönung, mehr Kontrast oder größerer Schrift besser lesen? Wählen Sie Ihre Farben und Ihre Schrift, einmalig für alle Seiten.

Kostenlose Lektion

Blockchain-Grundlagen

Die ganze Lektion steht hier zum Lesen. Erstellen Sie ein kostenloses Konto, um sie in einem Live-Lab auszuführen.

Container-Lab12 Min. Lesezeit7 Befehle

Wer kümmert sich um die gemeinsame Liste?

Stell dir vor, eine Klasse führt eine gemeinsame Seite darüber, wer wem etwas bezahlt hat. Wie verhinderst du, dass jemand heimlich eine Zeile ausradiert und einen anderen Betrag hinschreibt? Eine Blockchain antwortet mit Mathematik statt mit einer Person, die das Sagen hat. Dieses Lab ist ein Spielzeug: ein paar kurze Python-Dateien, die die Ideen zeigen, ohne Münze, ohne Netzwerk und ohne Wert.

Am Ende dieser Lektion

Notiz

Ich kann erklären, wie durch Hashes verknüpfte Blöcke eine Änderung an einem alten Eintrag sichtbar machen.

Schlüsselwörter

  • Hash: ein Fingerabdruck fester Länge, berechnet aus Daten. Ändere einen Buchstaben, und der Fingerabdruck ist völlig anders.
  • Block: eine Gruppe von Einträgen mit dem Hash des Blocks davor.
  • Kette: Blöcke in Reihenfolge, jeder mit dem Hash des vorigen.
  • Nonce: eine Zahl, die immer wieder geändert wird, bis der Hash so aussieht, wie die Regeln es verlangen.
  • Mining: Nonces ausprobieren, bis der Hash eines Blocks mit genug Nullen beginnt.
  • Signatur: der Beleg, dass eine Nachricht von jemandem mit einem geheimen Schlüssel stammt.

Zum Einstieg: was du schon weißt

Notiz

Antworte im Kopf. 1. Warum vergleicht man eine heruntergeladene Datei mit ihrer Prüfsumme? 2. Wenn du einen Buchstaben einer langen Nachricht änderst, soll sich ihr Fingerabdruck wenig oder stark ändern? 3. Was macht eine Schleife? Antworten: um zu prüfen, dass sich nichts geändert hat; stark; sie wiederholt einen Schritt.

Bevor du anfängst

Notiz

Klicke oben in der Leiste dieser Lektion auf Lab starten und warte, bis dort steht, dass es läuft. Es gibt einen Container, jupyter, und das Terminal erreicht sein Python mit docker exec jupyter, das einen Befehl darin ausführt. Der Link JupyterLab öffnet seine Webseite, Port 8888. Jede Schaltfläche Ausführen unten tippt ihren Befehl ins Terminal deines Labs, einen nach dem anderen in derselben Sitzung. Wenn du zuschauen oder eigene Befehle tippen willst, klicke in der Leiste auf Terminal öffnen (neuer Tab).

Eine Kette sind Blöcke, die die Fingerabdrücke der anderen tragen

ls listet den Arbeitsordner: drei kurze Python-Dateien, das Notebook und den Ordner steps. Das erste Skript baut drei Blöcke. Jede Zeile zeigt die Nummer des Blocks, den Hash des Blocks davor und seinen eigenen Hash, gekürzt. Block 0 hat nichts vor sich, also besteht sein vorheriger Hash nur aus Nullen. Der vorherige Hash jedes anderen Blocks ist der Hash der Zeile darüber. Jeder Hash beginnt mit 000, wozu das Mining ihn gezwungen hat.

Befehl
docker exec jupyter ls

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Befehl
docker exec jupyter python3 steps/link.py

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Ändere einen Betrag, und die Kette merkt es

Das Skript prüft die Kette, ändert einen Betrag in Block 1 und prüft erneut. Die erste Antwort ist (True, None): gültig, kein schlechter Block. Nach der Änderung ist sie (False, 1): nicht gültig, und Block 1 ist die Stelle. Der Fingerabdruck von Block 1 passt nicht mehr zu seinem Inhalt. Den Fingerabdruck zu fälschen hilft nicht. Block 1 neu zu minen macht Block 1 richtig, aber nun lautet die Antwort (False, 2), weil Block 2 noch den alten Hash von Block 1 trägt.

Befehl
docker exec jupyter python3 steps/tamper.py

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Mining heißt Zahlen ausprobieren, bis der Hash passt

Um einen Block anzufügen, verlangen die Regeln einen Hash, der mit einigen Nullen beginnt. Man findet ihn nur, indem man eine Nonce ausprobiert, dann die nächste und die nächste. Das Skript mint denselben Block bei vier Schwierigkeiten. Es brauchte 15 Versuche für eine Null, 835 für zwei, 7992 für drei und 109028 für vier. Jede weitere Null kostet viel mehr Arbeit, und die Antwort ist jedes Mal gleich, weil der Block und der Start feststehen.

Befehl
docker exec jupyter python3 steps/mine.py

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Prüfe dich

Tipp

Warum ist es schwerer, einen alten Block zu ändern als einen neuen? Antwort: Jeder Block danach trägt den alten Hash, also muss jeder neu gemint werden, und jeder kostet Versuche.

Ein Hauptbuch wird aus den Zahlungen berechnet

Niemand speichert einen Kontostand. Das Skript gibt Asha 10, Ben 5 und Cara 0 und spielt dann vier Zahlungen der Reihe nach ab. Die letzte Zeile sagt, dass die Zahlung von 8 von Cara an Asha abgelehnt wurde, weil Cara zu diesem Zeitpunkt nur 6 hatte. Die Kontostände sind Asha 6, Ben 0 und Cara 9.

Befehl
docker exec jupyter python3 steps/balances.py

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Eine Signatur zeigt, wer eine Nachricht gesendet hat

Jeder kann „Asha pays Ben 5“ schreiben. Eine Signatur zeigt, dass Asha es geschrieben hat. Diese besteht nur aus Hashes: ein geheimer Schlüssel aus 256 Paaren, ein öffentlicher Schlüssel, der der Hash jedes Elements ist, und eine Signatur, die aus jedem Paar ein Geheimnis offenlegt. Die signierte Nachricht wird mit True bestätigt. Ändere einen Buchstaben der Nachricht, behalte dieselbe Signatur, und die Prüfung ergibt False. Ein solcher Schlüssel signiert nur eine Nachricht, er ist also zum Lernen da und nicht zum Verwenden.

Befehl
docker exec jupyter python3 steps/sign.py

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Wenn zwei Ketten sich widersprechen, entscheidet die Arbeit

Zwei Personen können gleichzeitig verschiedene Blöcke an dieselbe Kette anfügen, und dann gibt es zwei Ketten. Das Skript baut beide aus denselben ersten zwei Blöcken. Kette A hat 3 Blöcke und Kette B hat 4. Beide sind gültig. Die Regel lautet, der Kette mit mehr Arbeit zu folgen, hier 768 gegen 1024, also gewinnt B und der zusätzliche Block von A wird verworfen.

Befehl
docker exec jupyter python3 steps/fork.py

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Ein häufiger Fehler

Warnung

Viele denken, eine gültige Kette bedeute, dass jede Zahlung darin wahr ist. Sie bedeutet nur, dass niemand den Eintrag verändert hat, seit er geschrieben wurde. Ob eine Zahlung überhaupt darin stehen darf, ist eine andere Aufgabe: Das Hauptbuch lehnt eine Überziehung ab, und eine Signatur zeigt, wer sie gesendet hat. Halte die drei Fragen auseinander: wurde es geändert, ist es erlaubt, wer hat es gesendet.

Dieselbe Arbeit in einem Notebook

Öffne JupyterLab über die Leiste und doppelklicke auf start.ipynb. Es baut eine Kette, prüft sie, ändert einen Block und prüft erneut. Klicke auf eine Zelle und drücke Umschalt und Eingabe, um sie auszuführen. In die letzte Zelle gehört deine eigene Frage, und chain.py ist kurz genug, um es ganz zu lesen.

Abschlusscheck

Tipp

Antworte, ohne zurückzublättern. 1. Was enthält ein Block, das ihn mit dem davor verknüpft? 2. Was probiert das Mining immer wieder? 3. Warum scheiterte die Prüfung an Block 2, nachdem Block 1 neu gemint wurde? 4. Zeigt eine gültige Kette, dass jede Zahlung wahr ist? Antworten: den Hash des vorigen Blocks; Nonces; Block 2 trug noch den alten Hash von Block 1; nein, nur dass sie nicht verändert wurde.

Für Lehrkräfte

Tipp

Diese Lektion ist ein kleines Beispiel für eine Lektion, die in einem Lab abläuft: Die Schritte und die Schaltflächen „Ausführen“ sind die Lektion, und das Lab ist die eigene Kopie jeder lernenden Person. Das Lab ist ein Dienst, JupyterLab mit einer Spielzeugkette aus der Standardbibliothek von Python, und nichts hier bewertet sich selbst: Die Lernenden geben ein eigenes Notebook ab, aus JupyterLab heruntergeladen, und einen Satz dazu, was es gezeigt hat. Kernpunkte: 1. Ein Hash verknüpft Blöcke, also fällt eine Änderung auf. 2. Mining ist Ausprobieren, dessen Aufwand mit der Schwierigkeit wächst. 3. Eine gültige Kette, eine erlaubte Zahlung und eine Signatur sind drei verschiedene Prüfungen. Häufiger Fehler: eine gültige Kette so lesen, als sei jede Zahlung wahr. Das Lab ist ein Spielzeug für die Ideen und spricht von keiner Münze, keinem Markt und keinem Preis. Material: das Lab und ein Browser. Tipp: Lassen Sie die Lernenden schätzen, wie viele Versuche die nächste Schwierigkeit braucht, bevor sie ausführen. Kopieren Sie die Lektion in Ihr eigenes Modul und ändern Sie sie, oder bauen Sie im Lektionseditor über das Menü Lab eine neue von Grund auf.

Über dieses Lab und seinen Quellcode: Blockchain-Lab: eine Spielzeugkette in Python zum Lesen, Brechen, Minen und Signieren

Sie unterrichten eine Klasse? Weisen Sie diese Lektionen Ihren Lernenden zu, mit Bewertung und einem Lab für jede lernende Person.