Glossar / Entwicklerreferenz
Pubkey-Skript
Auch bekannt als scriptPubKey, Locking Script, Sperrskript.
- Was ist das Pubkey-Skript?
- Das Pubkey-Skript ist das kurze Stück Bitcoin Script, das an jeder Transaktionsausgabe hängt und die Bedingungen nennt, die erfüllt sein müssen, bevor die Bitcoin in dieser Ausgabe wieder bewegt werden können.
Bitcoin liegt nicht in einer Adresse; er liegt in Ausgaben, die jeweils durch ein Pubkey-Skript geschützt sind. Bitcoin Core nennt das Feld scriptPubKey, und bei einer gewöhnlichen modernen Ausgabe ist es 22 oder 34 Bytes lang. Wenn Sie jemandem eine Adresse geben, übergeben Sie ihm das Rezept für das Pubkey-Skript, das seine Wallet schreiben wird.
So funktioniert es
Jede Ausgabe in einer serialisierten Transaktion besteht aus drei Dingen hintereinander: acht Bytes Wert in Satoshis, einem Längenpräfix und dem Pubkey-Skript selbst. Nichts in der Ausgabe nennt einen Empfänger. Das Skript ist der Empfänger, und eine Adresse ist nur eine mit Prüfsumme versehene Kodierung der wenigen Bytes darin.
Fünf Vorlagen machen heute fast alles auf der Blockchain aus. Ein Legacy-Sperrskript vom Typ Pay-to-Public-Key-Hash ist 25 Bytes lang und nennt vier Opcodes um einen 20 Byte langen Hash. Ein Sperrskript vom Typ Pay-to-Script-Hash ist 23 Bytes lang und endet mit OP_EQUAL. Natives SegWit ist im Vergleich bewusst einfach: ein Versionsbyte, gefolgt von einem einzigen Push, 22 Bytes für einen einzelnen Schlüssel und 34 Bytes für einen Skript-Hash, ohne jede Logik in der Ausgabe. Taproot ist ebenfalls 34 Bytes lang, ein Versionsbyte und ein 32 Byte langer Schlüssel.
Die Weiterleitungsrichtlinie kennt diese kurze Liste und weigert sich, etwas anderes weiterzugeben. Deshalb können Sie kein eigenes Ausgabeformat erfinden und erwarten, dass eine Wallet es bezahlt. Der Konsens ist hier lockerer als die Richtlinie, doch praktisch bedeutet das: Die fünf Vorlagen sind das ganze Menü.
Der Name ist ein Fossil. In den frühesten Transaktionen enthielt das Skript tatsächlich einen öffentlichen Schlüssel: Die Coinbase-Ausgabe des Genesis-Blocks ist 67 Bytes lang und enthält einen unkomprimierten 65 Byte langen Schlüssel, gefolgt von OP_CHECKSIG, und Sie können sie im Quellcode von Bitcoin Core selbst lesen. Einen Hash statt eines Schlüssels zu bezahlen, wurde im Jahr 2011 zur Norm, und heute enthalten die meisten Pubkey-Skripte überhaupt keinen öffentlichen Schlüssel, sondern nur eine Festlegung darauf.
Wo es auftritt
Bitten Sie einen beliebigen Node, eine rohe Transaktion zu dekodieren, und jede Ausgabe trägt ein scriptPubKey-Objekt mit vier Feldern: die für Menschen lesbare Assembler-Darstellung, das rohe Hex, die Typzeichenkette und die Adresse, auf die der Typ verweist. Block-Explorer zeigen dasselbe, meist als Locking Script oder Output Script bezeichnet.
Dort liegt auch die Watch-Only-Einrichtung einer Wallet. Eine Adresse zu importieren heißt, Ihrer Software zu sagen, welche Pubkey-Skripte sie in der Blockchain suchen soll. Deshalb hat ein Deskriptor, eine Definition, die die ganze Familie von Skripten erzeugt, die ein Schlüssel erzeugen kann, den Import Adresse für Adresse in ernsthafter Software abgelöst.
Die praktische Lesefertigkeit ist überschaubar. Beginnt das Skript mit 0 und enthält 20 Bytes, wird es jemand mit einer Signatur und einem günstigen Input ausgeben. Enthält es 32 Bytes, steckt ein Vertrag dahinter, den Sie nicht sehen können. Beginnt es mit 1 und enthält 32 Bytes, ist es Taproot, und es kann ein einzelner Schlüssel oder ein ganzer Baum von Bedingungen mit demselben Gesicht sein.
Pubkey-Skript vs. Signaturskript
Das Pubkey-Skript stellt die Frage, und das Signaturskript versucht, sie zu beantworten, und sie werden von verschiedenen Personen zu verschiedenen Zeitpunkten geschrieben. Wer Ihnen Geld sendet, schreibt das Pubkey-Skript, aus der Adresse, die Sie ihm gegeben haben, und bezahlt dessen Bytes. Sie schreiben das Signaturskript später, wenn Sie ausgeben, und bezahlen diese Bytes selbst. Deshalb kostet das Senden an eine Taproot-Adresse den Absender etwas mehr als das Senden an eine Legacy-Adresse, während es Ihnen deutlich mehr spart, wenn Sie die Bitcoin schließlich bewegen. Die beiden Skripte laufen zudem getrennt und nicht als ein zusammengefügtes Programm, eine Änderung aus dem Jahr 2010, nachdem sich die ursprüngliche gemeinsame Ausführung als ausnutzbar erwiesen hatte.