Zum Inhalt springen
buybitcoinsmart

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.

Häufig gestellte Fragen

Warum muss ein Skript überhaupt etwas kopieren?

Weil Bitcoin Script einen Stapel und keine Variablen hat. Jede Anweisung verbraucht, was sie liest, ein öffentlicher Schlüssel, der zuerst gehasht und dann für die Signaturprüfung verwendet werden muss, muss also kopiert werden, bevor der erste Schritt ihn zerstört.

Verwandte Begriffe

Mehr zum Thema Entwicklerreferenz

Diese Seite auf Englisch lesen