MSTR Cat

Blockchain/Niveau IV · Tiefer ins Protokoll/4.1 Script/Lektion 2

Standard-Scripts: P2PKH und P2SH

Coins an einen Schlüssel binden – und dann an den Hash eines beliebigen Scripts

MaterialienEine Block-Explorer-Oberfläche (z. B. Blockstream.info oder mempool.space)Ein Hashing-Werkzeug für SHA-256 und RIPEMD-160Hexadezimal-ReferenztabelleEin Block-Explorer, der rohe Transaktionsdaten im Hex-Format anzeigen kann

Neugier

  1. Warum sperrt Bitcoin die Coins an einen Hash statt an den Schlüssel selbst?
  2. Wie überprüft ein vierzeiliges Script in einer einzigen Ausführung sowohl das Eigentum als auch die Autorisierung?
  3. Was machte P2PKH über mehr als acht Jahre der Netzwerkgeschichte zum Standard-Adressformat?

Erkunden

    Teil IPay-to-Public-Key-Hash (P2PKH)

  1. Der Genesis-Block enthielt ausschließlich Pay-to-Public-Key-Outputs (P2PK). Diese Scripts legten den vollständigen öffentlichen Schlüssel (2009 ein unkomprimierter Schlüssel mit 65 Bytes) direkt im Output ab, wo er schon vor jedem Ausgeben sichtbar war, und machten Outputs groß. P2PKH, das ebenfalls bereits in der ursprünglichen Software von 2009 enthalten war und für gewöhnliche Zahlungen an Adressen verwendet wurde, speichert stattdessen einen 20-Byte-Hash und hält den Schlüssel so verborgen, bis die Coins ausgegeben werden.
  2. Das Locking-Script lautet `OP_DUP OP_HASH160 <hash> OP_EQUALVERIFY OP_CHECKSIG`. Zu Beginn der Ausführung liegen die Daten des Ausgebenden auf dem Stack: die Signatur und darüber, ganz oben, der öffentliche Schlüssel. Die Engine dupliziert den Schlüssel, hasht ihn mit RIPEMD-160(SHA256(key)) und vergleicht das Ergebnis mit dem gespeicherten Hash. Stimmen beide überein, ist `OP_EQUALVERIFY` erfüllt; andernfalls bricht die Ausführung sofort ab.
  3. Ist die Hash-Prüfung erfolgreich, verifiziert `OP_CHECKSIG` die ECDSA-Signatur anhand des offengelegten öffentlichen Schlüssels und der Transaktionsdaten. Dieser doppelte Mechanismus stellt sicher, dass nur der Inhaber des zugehörigen privaten Schlüssels die Mittel freigeben kann. Das Output-Script umfasst insgesamt 25 Bytes – eine kompakte Struktur, die zur Grundlage der mit „1“ beginnenden Legacy-Adressen wurde.
  4. P2PKH war während des größten Teils der Geschichte von Bitcoin der gängigste Output-Typ für gewöhnliche Zahlungen und blieb es auch noch Jahre nach der Aktivierung von SegWit im August 2017 bei Block 481.824, da sich natives SegWit nur schrittweise durchsetzte. Sein Erfolg beruhte auf Einfachheit und Kompatibilität; über die ursprünglichen Protokollregeln hinaus waren keine Konsens-Upgrades nötig. Jeder Node konnte diese Scripts unabhängig und ohne komplexe Zustandsverfolgung validieren, was P2PKH in der frühen Wachstumsphase von Bitcoin zum robustesten Output-Typ für allgemeine Überweisungen machte.
  5. Das Adressformat nutzt die Base58Check-Kodierung, die eine vier Byte lange Prüfsumme zur Erkennung von Tippfehlern enthält. Ein einziges falsch eingegebenes Zeichen lässt die Prüfsumme mit an Sicherheit grenzender Wahrscheinlichkeit scheitern, sodass die Wallet die Adresse ablehnt. Diese Redundanz machte P2PKH trotz seiner technischen Komplexität benutzerfreundlich und schlug eine Brücke zwischen kryptografischer Sicherheit und menschlicher Bedienbarkeit.
  6. Öffnen Sie einen Block-Explorer und suchen Sie eine beliebige Transaktion mit einem Input, der auf eine mit „1“ beginnende Adresse verweist. Untersuchen Sie das Feld `scriptSig`: Es enthält die Signatur, gefolgt vom öffentlichen Schlüssel als Hex-String. Vergleichen Sie diesen öffentlichen Schlüssel mit dem 20-Byte-Hash im `scriptPubKey` des referenzierten Outputs. Wenden Sie auf diesen Schlüssel erst SHA-256 und dann RIPEMD-160 an, ergibt sich der gespeicherte Hash, was die Verknüpfung bestätigt.
  7. Teil IIPay-to-Script-Hash (P2SH)

  8. Vor 2012 musste für ein komplexes Script wie ein 5-of-5-Multisig der gesamte Locking-Code direkt in den Output geschrieben werden. Dadurch wurde der Output groß, und der Sender zahlte die Gebühr dafür. Zudem wurden die öffentlichen Schlüssel aller Beteiligten und die konkreten Signaturanforderungen für jeden sichtbar, der die Blockchain beobachtete. Der Sender musste vor dem Senden die genaue Struktur des Ziels kennen – ein Hindernis für Unternehmens-Treasuries oder Börsen, die flexible Sicherheitskonfigurationen benötigten.
  9. Gavin Andresen schlug Anfang 2012 BIP16 vor, um dieses Problem zu lösen. Damit konnte ein Output statt des Scripts selbst nur noch dessen HASH160-Digest enthalten. Das Output-Script schrumpfte auf 23 Bytes, etwas weniger als die 25 Bytes von P2PKH. Der Sender musste die Ausgabebedingungen nicht mehr kennen; er zahlte einfach an einen Hash. Die Komplexität verlagerte sich vollständig auf denjenigen, der die Coins ausgibt.
  10. Die Aktivierung von BIP16 im April 2012 war umstritten. Luke Dashjr schlug mit BIP17 eine Alternative vor, die einen anderen Opcode und ein anderes Kodierungsschema verwendete. Die Debatte darüber, welcher Vorschlag übernommen werden sollte, heizte sich in der Entwicklergemeinschaft erheblich auf. Nachdem die Miner ihre Unterstützung signalisiert hatten, wurde BIP16 im April 2012 aktiviert und zum Standardverfahren, um komplexe Scripts zu verpacken.
  11. Das Ausgeben eines Pay-to-Script-Hash-Outputs ist ein zweistufiger Prozess. Zunächst legt der Ausgebende sein vollständiges Redeem-Script auf den Stack. Der Node prüft, ob der HASH160 dieses Scripts mit dem Hash im Output übereinstimmt. Stimmt er nicht überein, schlägt die Ausführung sofort fehl. Stimmt er überein, führt der Node anschließend das offengelegte Redeem-Script mit den übrigen Daten auf dem Stack aus, um die eigentlichen Ausgabebedingungen zu prüfen.
  12. Das Design hat einen Haken: Niemand kann das Redeem-Script vor der Zahlung prüfen, da nur sein Hash on-chain liegt. Hat die Software des Empfängers ein fehlerhaftes Script erstellt oder geht das Script verloren, können an diese Adresse gezahlte Coins für immer unausgebbar sein.
  13. Als SegWit im August 2017 aktiviert wurde, diente P2SH als Kompatibilitätsbrücke. Nutzer konnten neue Witness-Scripts in eine P2SH-Hülle einbetten und so „verschachtelte“ (nested) Adressen erzeugen, die weiterhin mit „3“ begannen. Alte Wallets, die mit den neueren bech32-Adressen nicht umgehen konnten, konnten so dennoch an SegWit-Nutzer senden, während die SegWit-fähigen Empfänger beim Ausgeben den Gebührenrabatt erhielten. Heute wird aus Effizienzgründen natives SegWit bevorzugt, doch P2SH bleibt ein wichtiger Mechanismus für komplexe Verträge und die Kompatibilität mit Legacy-Systemen.

Kernfakten

  • P2PKH-Outputs speichern einen 20-Byte-HASH160 des öffentlichen Schlüssels statt des vollständigen Schlüssels.
  • Das Locking-Script `OP_DUP OP_HASH160 <hash> OP_EQUALVERIFY OP_CHECKSIG` ist genau 25 Bytes lang.
  • Zum Ausgeben müssen sowohl eine gültige ECDSA-Signatur als auch der zum gespeicherten Hash passende öffentliche Schlüssel offengelegt werden.
  • Legacy-P2PKH-Adressen beginnen mit „1“ und verwenden die Base58Check-Kodierung mit Prüfsumme.
  • P2PKH war jahrelang, vor und nach SegWit, der dominierende Output-Typ für gewöhnliche Zahlungen.
  • Die Ausführung schlägt sofort fehl, wenn `OP_EQUALVERIFY` eine Abweichung zwischen dem gehashten Schlüssel und dem gespeicherten Hash feststellt.
  • BIP16 wurde von Gavin Andresen vorgeschlagen und im April 2012 aktiviert.
  • Ein P2SH-Output-Script enthält nur den HASH160 eines Redeem-Scripts und ist 23 Bytes lang.
  • Luke Dashjrs BIP17 konkurrierte während der hitzigen Debatte von Januar bis März 2012 mit BIP16.
  • Redeem-Scripts sind per Konsens auf 520 Bytes begrenzt, die maximale Größe eines einzelnen auf den Stack gelegten Elements.
  • P2SH-Adressen verwenden die Base58Check-Kodierung und beginnen immer mit der Ziffer „3“.
  • Nested SegWit (meist P2SH-P2WPKH) ermöglichte es alten Wallets nach 2017, an SegWit-Nutzer zu zahlen.

Übung neun, sechs, drei, eins

9SammelnIdentifizieren Sie 9 reale Transaktions-Inputs auf der Bitcoin-Blockchain, die von P2PKH-Adressen ausgeben. Notieren Sie jeweils die Blockhöhe, den im scriptSig offengelegten öffentlichen Schlüssel und den entsprechenden Hash im Output.
6GruppierenGruppieren Sie die 9 nach Zeitraum in 6 Gruppen: 2009–2011, 2012–2013, 2014–2015, 2016–2017, 2018–2021, ab 2022. Notieren Sie, ob komprimierte oder unkomprimierte Schlüssel verwendet werden.
3VerdichtenReduzieren Sie diese Gruppen auf 3 unterschiedliche Gründe, warum P2PKH trotz der nach 2017 verfügbaren effizienteren Output-Typen dominant blieb.
1KristallisierenSchreiben Sie einen Satz, der erklärt, wie `OP_EQUALVERIFY` einen öffentlichen Schlüssel in ein bindendes Commitment verwandelt, bevor die Signaturprüfung stattfindet.

Faktcheck

Datumsangaben, Zahlen und Behauptungen wurden mit den unten aufgeführten veröffentlichten Quellen abgeglichen.

In der interaktiven Akademie öffnen →

EN PT ES ZH JA KO RU FR MS