Blockchain 101
Juli 27, 2020
«Ladies und Gentlemen, fasten your seatbelt!» Um 07:51 morgens bekamen wir im Whatsapp Gruppenchat diese Nachricht von Studiengangsleiter Patrick Comboeuf. Er warnte uns bereits vor dem «leichten Muskelkater im Gehirn» für den kommenden Tag. Blockchain is the way to go.
Die Veröffentlichung des Bitcoin White Papers von Satoshi Nakamoto (2008), hat den Eindruck vermittelt, dass die Idee der Blockchain eine neue Erfindung sei. Jedoch liegt die Geschichte von Bitcoin und den digitalen Währungen viel weiter zurück.
Auf den Yap-Inseln, einer kleinen Inselgruppe im west-pazifischen Ozean, wird ein ähnliches Zahlungssystem schon seit Jahrhunderten eingesetzt. Die Einwohner bezahlten damals mit Steingeld, auch Rai genannt. Für die Herstellung des Steingeldes brauchte man Kalkstein. Nun ist das Problem aber, dass es auf der Yap Insel gar keine Kalksteine gibt. Weswegen die Yap-Insel-Bewohner eine andere Lösung finden mussten. Aufgrund dessen wurden die Kalksteine von der Insel Palau, welche ca. 400 Kilometer entfernt von Yap liegt, beschaffen. Die Bearbeitung der Steinscheiben war jedoch äusserst mühsam. Glücklicherweise lassen sie sich aber einfach von anderen Felsen unterscheiden – zumal sie immer ein grosses Loch in der Mitte haben. Aufgrund dessen sowie der Grösse und des Schwierigkeitsgrades der Beschaffung, waren sie sehr wertvoll.
Der Transport von diesen riesengrossen und bis zu fünf Tonnen schweren Steinen war schwierig. Darum einigten sich die Yap Bewohner darauf, dass die Steine bei Transaktionen nicht mehr physisch bewegt werden mussten. Aus diesem Grund liess man sie an einer beliebigen Stelle auf der Insel stehen. Jeder Inselbewohner wusste zu jeder Zeit, wem welchen Stein gehört. Über die Besitzverhältnisse war man sich einig, es herrschte ein Konsens.
Auch wenn dieses System auf Yap-Island seit Generationen einwandfrei funktioniert, ist es unvorstellbar dieses zu skalieren. Hier kommt Blockchain ins Spiel.
© 2020 Prof. Dr. Fabian Schär
Im wesentlichen müssen die folgende drei Bedingungen erfüllt sein, damit Bitcoin-Blockchain Transaktionen funktionieren können:
© 2020 Prof. Dr. Fabian Schär
Transaktionen fungieren als Nachrichten im Bitcoin Netzwerk. Sie bestehen aus mindestens einem Input und einem Output in Bitcoin Einheiten (Satoshis). Jeder neu generierte Output kann nur ein Mal als Input für eine neue Transaktion eingesetzt werden. Folglich ist dieser Input, der Output einer früheren Transaktion. In diesem Sinne entsteht eine Transaktionskette mit anreihenden In- und Outputs.
© 2020 Prof. Dr. Fabian Schär
Es gibt verschiedene Transaktionstypen, um präzisere Beträge (Satoshis) zu transferieren. Einfachheitshalber werden in den kommenden Beispielen Mininggebühren vernachlässigt.
© 2020 Prof. Dr. Fabian Schär
Ein wichtiger Begriff, der bei Bitcoin immer öfters fällt, ist ‘UTXO – Unspent Transaction Output’. Was meint man damit?
Ein kleines Beispiel verdeutlicht dies. Jerry hat in seinem Wallet 10 BTC und möchte Tom davon 3 BTC für eine Dienstleistung bezahlen. Jerry kann jedoch nicht ohne Weiteres 3 BTC transferieren. Er muss alles, also die ganzen 10 BTC ausgeben (=Transaktionsinput). Dabei entstehen schliesslich 2 Outputs (=Transaktionsoutput). Der eine Output besteht aus 3 BTC, dieser geht entsprechend an Tom. Der andere Output von 7 BTC geht als ‘Wechselgeld’ in Jerrys Wallet zurück. Diesen Transaktionstyp nennt man auch eine aufsplittende Transaktion.
Folglich kann der Output von 7 BTC wieder als Input für eine neue Transaktion gebraucht werden. Dieser stellt den ‘Unspent Transaction Output’ – UTXO dar. Mit anderen Worten: Wenn man kein UTXO hat, hat man keine Bitcoins im Wallet. Dieses UTXO Model ist ein fundamentales Element von Bitcoin und anderen Kryptowährungen.
Im folgenden Abschnitt werden technische Einzelheiten von Transaktionen bzw. deren Aufbau erklärt.
Bitcoin nutzt ein Scripting System (Script) für Transaktionen. Dieses basiert auf einem Stapelprinzip. Das heisst, Instruktionen werden aufeinander gelegt und von oben nach unten abgearbeitet. Um das Verfahren besser zu verstehen, nehmen wir das vorherige Beispiel mit Tom und Jerry. Tom hat 10 BTC und möchte Jerry 3 BTC transferieren. Damit Jerry seine 3 Bitcoins empfangen kann, beinhaltet jeder Output ein Sperrskript. Dies ist das sogenannte <scriptPubKey>. Die Auszahlungsbedingungen des Outputs müssen mit dem Entsperr-Skript <scriptSig> übereinstimmen. Dieser ist Teil des Transaktionsinputs. Kurz gesagt: Wenn die Bedingungen der zwei Teil-Skripte übereinstimmen, bekommt Jerry seine 3 Bitcoins.
Hier werden zwei einfache Transaktionen beschrieben. Eine davon ist Pay-to-Public-Key (P2PK). Der Input <scriptSig> beinhaltet nur eine Signatur <sig>. Der Output <scriptPubKey> enthält den öffentlichen Schlüssel <pubKey>. Dieser definiert die Auszahlungsbedingung. Sobald das Skript ausgeführt wird, vergleicht der Befehl OP_CHECKSIG die Signatur <sig> mit dem öffentlichen Schlüssel <pubKey>. Falls der Schlüssel zur Signatur passt, wird die Transaktion ausgeführt. Der Befehl kann nur zwei Zustände ermitteln: 1 (TRUE) oder 0 (FALSE). Obwohl P2PK eines der einfachsten Skripte ist, wird dieses nicht mehr so oft gebraucht und wurde weitgehend durch das komplexere P2PKH Skript ersetzt.
© 2020 Prof. Dr. Fabian Schär
Eine weitere Standard.Transaktion ist das besser bekannte Pay-to-Public-Key-Hash (P2PKH). Es ist ähnlich wie das P2PK. Es beinhaltet stattdessen den Hash eines öffentlichen Schlüssels, und nicht den öffentlichen Schlüssel selbst. Die nächste Abbildung erklärt des weiteren den Stapel-Verlauf eines solchen Skripts. Im Bestandteil des Transaktionsinputs <scriptSig> werden zunächst die Signatur <sig> und der öffentliche Schlüssel <pubkey> auf den Stapel gelegt. Infolgedessen dupliziert die Auszahlungsbedingung <scriptPubKey> das oberste Teilskript. In diesem Fall ist das der öffentliche Schlüssel. Die Duplikation geschieht mittels dem Befehl OP_DUP. Anschliessend wird der oberste Stack mittels OP_HASH160 in den <pubKeyHash> umgewandelt. Dies ist nun ein ‘hashed öffentlicher Schlüssel’. Dieser wird infolgedessen mit dem bereits vorhandenem Hash des öffentlichen Schlüssels im <scriptPubKey> überprüft. Dies geschieht mittels dem Befehl OP_EQUALVERIFY. Im Falle einer Übereinstimmung der Schlüssel erfolgt noch zusätzlich die Überprüfung der Signatur mittels OP_CHECKSIG, analog zum Skript P2PK.
© 2020 Prof. Dr. Fabian Schär
P.S: Vielen Dank an Greg von learnmeabitcoin.com für die Erlaubnis der Verwendung seiner Animationen. Buy him a beer!
Unser Newsletter liefert dir brandaktuelle News, Insights aus unseren Studiengängen, inspirierende Tech- & Business-Events und spannende Job- und Projektausschreibungen, die die digitale Welt bewegen.