Glossar / Entwicklerreferenz
OP_DUP
- Was ist OP_DUP?
- OP_DUP kopiert das oberste Element des Stapels, damit es zweimal verwendet werden kann, und deshalb kann das Standard-Skript pay-to-public-key-hash sowohl den Hash Ihres öffentlichen Schlüssels berechnen als auch damit verifizieren.
Ein Byte, 0x76, und eine Aufgabe. Bitcoin Script kennt keine Variablen, nur einen Stapel, ein von einer Anweisung verbrauchtes Element ist also verschwunden, bevor die nächste läuft, und die Vervielfältigung ist der einzige Weg, es erneut zu verwenden. Es ist der erste der vier arbeitenden Opcodes im Skript mit 25 Bytes, das fast jede Bitcoin-Adresse schützte, die mit 1 beginnt.
Wie es funktioniert
Die Vervielfältigung ist nötig, weil die Verifizierung denselben öffentlichen Schlüssel für zwei unvereinbare Zwecke braucht. Die Ausgabe hat sich nur auf einen Hash festgelegt, also muss der Schlüssel gehasht und verglichen werden, um zu beweisen, dass es der richtige Schlüssel ist. Die Signaturprüfung braucht dann den Schlüssel selbst, den der Vergleich verbraucht hätte.
Verfolgen Sie eine Legacy-Ausgabe Schritt für Schritt. Die Daten des Ausgebers landen als Signatur auf dem Stapel, darüber ein öffentlicher Schlüssel. OP_DUP erzeugt eine zweite Kopie des Schlüssels. OP_HASH160 ersetzt die Kopie durch ihren 20 Byte langen Hash. Die Ausgabe legt die festgelegten 20 Bytes obenauf, OP_EQUALVERIFY verbraucht beide und bricht bei jeder Abweichung das ganze Skript ab, und OP_CHECKSIG steht vor dem ursprünglichen Schlüssel und der Signatur, genau das, was es braucht. Fünf Schritte, keine Verzweigung, keine Schleife und jedes Mal feste Kosten.
Der Opcode zählt gegen zwei Obergrenzen, ohne etwas Teures zu tun. Er ist eine der 201 arbeitenden Anweisungen, die ein Skript vor Taproot enthalten darf, und die Kopie, die er anlegt, zählt zum Limit von 1.000 Elementen über alle Stapel. Beides spielt für eine Ausgabe mit einem einzigen Schlüssel keine Rolle, und beides spielt in einem Skript eine Rolle, das innerhalb einer schleifenfreien Kette von Bedingungen vervielfältigt.
Wo er auftritt
Sehen Sie sich eine beliebige Transaktion an, die eine Adresse ausgibt, die mit 1 beginnt, und das Ausgabeskript beginnt mit OP_DUP. Block-Explorer zeigen es als erstes Wort der Assembler-Darstellung.
Interessanter ist, wo er läuft, ohne zu erscheinen. Eine native SegWit-Ausgabe mit einem einzigen Schlüssel enthält überhaupt keine Logik, nur ein Versionsbyte und einen Hash mit 20 Bytes, doch BIP-141 weist den Node an, aus diesem Hash die klassische Vorlage zu bauen und sie trotzdem auszuführen. So wird der Opcode bei jeder P2WPKH-Ausgabe im Netzwerk weiter ausgeführt und erscheint nirgends im Block. Sie erhalten das Verhalten, ohne die vier Gewichtseinheiten zu zahlen, die das Byte früher kostete.
Script-Hash-Ausgaben und Taproot-Key-Path-Ausgaben überspringen ihn vollständig. Eine P2SH-Ausgabe vergleicht einen Hash direkt, und eine Taproot-Key-Ausgabe verifiziert eine Signatur gegen den Ausgabeschlüssel, ohne dass ein Skript beteiligt ist. Das ist das kleinstmögliche Beispiel dafür, was SegWit und Taproot wirklich getan haben: weniger neue Fähigkeiten als dieselben Prüfungen so angeordnet, dass die Chain weniger Bytes tragen muss, um sie zu bekommen.