Glossar / Adressen und Schlüssel
P2SH-Adresse
Auch bekannt als Pay-to-Script-Hash, P2SH-Output.
- Was ist eine P2SH-Adresse?
- Eine P2SH-Adresse beginnt mit 3 und bindet sich an den Hash eines Redeem-Skripts, sodass die Ausgabebedingungen geheim bleiben, bis jemand das Skript offenlegt.
Spezifiziert im BIP-16.
Pay-to-Script-Hash kam mit BIP-16, durchgesetzt ab Block 173.805 am 1. April 2012, und es änderte, wer die Kosten der Komplexität trägt. Davor musste ein Absender den gesamten Vertrag in den Output schreiben. Danach schreibt der Absender 23 Bytes, und der Empfänger zahlt dafür, das Skript später offenzulegen, weshalb eine Adresse mit 3 einen Tresor mit fünf Schlüsseln oder eine schlichte Wallet mit einem einzigen Schlüssel verbergen kann.
Wie es funktioniert
Das Output-Skript ist kurz und für jede P2SH-Adresse identisch: OP_HASH160, gefolgt von einem 20 Byte langen Hash und OP_EQUAL, insgesamt 23 Bytes. Der Hash bindet sich an ein Redeem-Skript, das nur der Empfänger kennt.
Das Ausgeben erfolgt in zwei Durchgängen. Das scriptSig liefert die Argumente, die das Redeem-Skript benötigt, und dann das serialisierte Redeem-Skript selbst als letzten Eintrag. Ein Node hasht diesen letzten Eintrag, prüft ihn gegen den gebundenen Wert und deserialisiert das Skript, wenn beide übereinstimmen, und führt es gegen alles aus, was noch auf dem Stack liegt. Beide Stufen müssen erfolgreich sein.
Zwei Grenzen bestimmen, was hineinpasst. Ein Redeem-Skript ist ein einzelnes Stack-Element, kann also das Limit von 520 Bytes pro Push nicht überschreiten, das Bitcoin Core als MAX_SCRIPT_ELEMENT_SIZE definiert. Die Relay-Richtlinie fügt eine zweite Obergrenze von 15 Signaturvorgängen pro P2SH-Eingabe hinzu. Zusammen begrenzen sie die Anordnung deutlich unter dem, was die Skriptsprache allgemein erlaubt, wo das Limit ein Skript von 10.000 Bytes ist.
Die Adresse selbst ist Base58Check mit einem Versionsbyte von 0x05, was die führende 3 und eine Zeichenkette aus 34 Zeichen ergibt. BIP-13 definierte dieses Format, getrennt von der Konsensregel in BIP-16.
Wo sie auftritt
Auszahlungsformulare von Börsen, die eine Option als "SegWit" beschreiben, ohne "native" zu sagen, meinen meist eine Adresse mit 3. Multisig-Tresore, die vor 2018 erstellt wurden, verwenden sie. Ebenso atomare Swaps und Hashed-Timelock-Verträge, die ein Skript benötigen, aber eine Adresse wollen, die eine einfache Wallet bezahlen kann.
Die Folge des Designs ist Mehrdeutigkeit, und sie ist vollständig. Ein nicht ausgegebener Output mit 3 offenbart nur einen Hash, sodass ein Block-Explorer nicht sagen kann, ob er einen verpackten einzelnen Schlüssel oder ein Unternehmensquorum enthält, und der Absender ebenso wenig. Die Information erscheint erst in der ausgebenden Transaktion.
Diese Mehrdeutigkeit birgt einen realen Verlustfall. Das Wiedererlangen von Coins aus einem P2SH-Output erfordert das Redeem-Skript, nicht nur die privaten Schlüssel. Eine Seed-Phrase allein baut kein beliebiges Skript wieder auf, daher muss jede P2SH-Anordnung, die aufwendiger ist als eine Standard-Wallet-Ableitung, als Deskriptor oder als die Skript-Bytes selbst gesichert werden. Menschen haben Coins verloren, obwohl sie jeden Schlüssel und kein Skript besaßen.
P2SH-Adresse vs. P2SH-Multisig
P2SH-Multisig ist eine Sache, die Sie in eine P2SH-Adresse legen können, kein Synonym für das Format. Die Adresse ist ein Container, und das darin verborgene Redeem-Skript kann ein m-of-n-Multisig, ein verschachtelter SegWit-Key-Hash, eine zeitgesperrte Wiederherstellungsklausel oder ein Skript sein, das noch niemand geschrieben hat. Eine Adresse mit 3 als "eine Multisig-Adresse" zu lesen, ist eine Vermutung, die oft scheitert, weil verpacktes SegWit die 3 mehrere Jahre nach 2017 zum Standardformat für einen einzigen Schlüssel machte und Millionen gewöhnlicher Wallets hinter diesem Präfix zurückließ.