Glossar / Entwicklerreferenz
PP-Skript
- Was ist PP-Skript?
- PP-Skript war das Pflichtfeld in einer Ausgabe nach BIP70, das das rohe Sperrskript enthielt, das der Zahler reproduzieren musste, dieselben Bytes, die in einer Transaktionsausgabe landen.
Spezifiziert im BIP-70.
Von allem, was BIP70 über die Leitung schickte, ist das Skript der einzige Teil, der bis auf die Blockchain gelangt ist. Zertifikate, Notizen und Ablaufzeiten blieben alle außerhalb der Chain, während das Sperrskript wortgetreu in die Transaktion einging und heute in der Menge der nicht ausgegebenen Ausgaben steht. Diese Bytes, und nichts anderes in der Anfrage, entscheiden darüber, wer die Coins ausgeben kann.
So funktioniert es
Status: historisch. Das Skript war Feld 2 der Output-Nachricht und der einzige Teil davon, den ein Händler nicht weglassen konnte, da der Betrag standardmäßig null war. Bitcoin Core hat die Auswertung davon in 0.20.0 eingestellt, veröffentlicht am 3. Juni 2020.
Ein Skript statt einer Adresse zu senden war eine bewusste Entscheidung. Eine Adresse ist ein Transportformat für Menschen: base58check oder bech32, mit einem Präfix, einer Prüfsumme und einem Zeichensatz, der dafür gewählt wurde, das Aufschreiben und Vorlesen zu überstehen. Eine Wallet, die eine erhält, muss sie erst in ein Skript dekodieren, bevor sie etwas bauen kann. BIP70 übersprang diesen Umweg und benannte das Ziel in der Form, die das Netzwerk tatsächlich verwendet.
Die Standardformen haben feste Größen, und wer sie kennt, kann einen Block-Explorer deutlich leichter lesen:
- Pay-to-Public-Key-Hash, 25 Bytes: duplizieren, hashen, 20 Bytes pushen, Gleichheit prüfen, Signatur prüfen.
- Pay-to-Script-Hash, 23 Bytes: hashen, 20 Bytes pushen, Gleichheit prüfen.
- Single-Key-Segwit, 22 Bytes: ein Versionsbyte null und ein 20-Byte-Hash.
- Script-Hash-Segwit, 34 Bytes: Version null und ein 32-Byte-Hash.
- Taproot, 34 Bytes: Version eins und ein 32-Byte-Schlüssel.
Was das Format aufgab, war die Fehlererkennung. Bech32 garantiert, dass bei einer Adresse mit bis zu 89 Zeichen jedes Austauschen von vier Zeichen erkannt wird, und base58check erkennt Verfälschungen mit einem Vier-Byte-Hash. Rohe Skript-Bytes tragen keines von beidem. Ein gekipptes Bit in einer Adresse erzeugt eine Zeichenkette, die Ihre Wallet ablehnt; ein gekipptes Bit in einem Skript erzeugt eine gültige Ausgabe, die niemand jemals ausgeben kann.
Wo Sie es sehen
Skripttypen sind der Grund, warum zwei Auszahlungen derselben Größe unterschiedliche Gebühren kosten können.
Eine Börse, die Sie ein Adressformat wählen lässt, wählt damit ein Skript für Sie. Eine Single-Key-Segwit-Ausgabe braucht 22 Bytes gegenüber 25 bei der Legacy-Form, was unbedeutend ist, aber sie später auszugeben ist es nicht: Dieser Input kostet ungefähr 68 virtuelle Bytes, während ein Legacy-Input etwa 148 kostet, sodass Coins, die Sie heute erhalten, einen Teil Ihrer Gebührenrechnung für den Rest ihres Lebens festlegen. Bei 20 sat/vB beträgt die Differenz etwa 1.600 Satoshis für jeden Input, den Sie schließlich ausgeben.
Explorer nennen den Typ jeder Ausgabe, die sie anzeigen, und so können Sie prüfen, auf welchen Typ Sie tatsächlich bezahlt wurden. Neuere Software beschreibt Ziele mit Output-Deskriptoren, einer kompakten Textform, die eine ganze Familie von Skripten und ihre Ableitung abdeckt statt jeweils nur eines Skripts.
Die Gewohnheit, die sich aus all dem zu behalten lohnt, ist einfach. Bestätigen Sie das Ziel auf einem Gerät mit eigenem Bildschirm, denn Malware, die eine Adresse in Ihrer Zwischenablage austauscht, ist verbreitet, und eine Hardware-Wallet, die den echten Empfänger anzeigt, ist die Prüfung, die das erkennt.
PP-Skript vs. Pubkey-Skript
Das BIP70-Feld war ein Container; ein Pubkey-Skript ist die Sache selbst. Ein Pubkey-Skript, auch scriptPubKey oder Sperrskript genannt, erscheint in jeder jemals erstellten Transaktionsausgabe und legt die Bedingung fest, die ein Ausgebender erfüllen muss. PP-Skript war ein bestimmter Ort, an den eine Kopie eines solchen gelangte, innerhalb eines Protokolls, das niemand ausführt. Verwenden Sie den Feldnamen nur beim Lesen von BIP70-Dokumentation und den allgemeinen Namen überall sonst.