Zum Inhalt springen
buybitcoinsmart

Glossar / Protokoll und Upgrades

OP_CAT

Was ist OP_CAT?
OP_CAT fügt die beiden obersten Elemente auf dem Skriptstapel zu einem zusammen, eine Operation, die Satoshi 2010 deaktivierte und die BIP-347 innerhalb von tapscript wiederherstellen will.

Spezifiziert im BIP-347.

Verkettung klingt trivial und ist es nicht. Mit ihr kann ein Skript den Signatur-Hash einer Transaktion aus Teilen, die auf dem Stapel abgelegt wurden, in Blöcken von höchstens 520 Bytes wieder zusammensetzen und diesen Hash dann mit einer gewöhnlichen Signaturprüfung überprüfen. So wurde ein Opcode, der wegen seiner Gefährlichkeit abgeschaltet wurde, zum meistdiskutierten Punkt auf der Covenant-Liste.

Wie es funktioniert

Status: deaktiviert seit August 2010, als im Rahmen einer defensiven Bereinigung der Skript-Engine eine Reihe von String- und Arithmetik-Opcodes abgeschaltet wurde. BIP-347 will ihn nur in tapscript wieder aktivieren. Auf dem Mainnet ist er nicht aktiv.

Die Operation selbst ist eine Zeile: zwei Elemente vom Stapel nehmen, ihre Bytes aneinandergefügt wieder ablegen. Gefährlich war sie 2010, weil nichts begrenzte, wie groß ein Stapel-Element werden konnte. Wird ein Element mit sich selbst verkettet, verdoppelt es sich, sodass eine kurze Schleife aus Ablegen und Verketten wenige Bytes zu Gigabytes aufblähen und den Arbeitsspeicher des Nodes mitreißen konnte. Die moderne Engine hat eine harte Grenze von 520 Bytes für jedes einzelne Stapel-Element, sodass BIP-347 die Operation einfach fehlschlagen lässt, wenn das Ergebnis sie überschreiten würde, und der alte Angriff verschwindet.

Eine Besonderheit der Nummerierung macht die Wiederbelebung ungewöhnlich sauber. OP_CAT ist der Opcode 126. Als BIP-342 tapscript definierte, erklärte es unter anderem die Opcodes 126 bis 129 zu OP_SUCCESS: Trifft ein Node auf einen davon, gelingt das Skript sofort. Alte Nodes akzeptieren daher bereits jedes tapscript, das das Byte 126 enthält, ohne es auszuführen. Wird es neu definiert, um nur noch zu verketten, schränkt das nur ein, was diese Nodes ohnehin erlaubt hätten, was die Änderung zu einem Soft Fork statt zu einer Kettenteilung macht.

Was die Verkettung freischaltet, steht in keinem Verhältnis zu ihrem Umfang. Ein Skript, das Byte-Strings bilden kann, kann einen Merkle-Beweis prüfen, eine Lamport- oder Winternitz-Signatur überprüfen, die aus Hashes statt aus elliptischen Kurven gebildet wurde, und eine Signatur dazu zwingen, einen festen Nonce zu verwenden, sodass die Signaturgleichung selbst die ausgebende Transaktion für das Skript offenlegt. Dieser letzte Kniff ist es, der OP_CAT ohne einen speziellen Covenant-Opcode zu einem allgemeinen Covenant-Werkzeug macht.

Wo er auftritt

OP_CAT läuft auf Bitcoin überhaupt nicht. Dort, wo er läuft, handelt es sich um Sidechains und Testnetzwerke, die die Skript-Engine von Bitcoin kopiert und dann die Entscheidung von 2010 rückgängig gemacht haben.

Elements und damit Liquid hat den Opcode aktiviert, weshalb die meisten veröffentlichten Covenant-Demonstrationen für Liquid statt für Bitcoin geschrieben sind. Angepasste Signets mit den Regeln von BIP-347 sind der andere Ort, und sie existieren, damit Entwickler die Sache bauen können, bevor sie jemanden bitten, den Konsens zu ändern.

Für jemanden, der Bitcoin kauft oder hält, ist der praktische Inhalt kurz: An Ihrer Wallet, Ihren Adressen oder Ihren Backups ändert sich nichts, ob OP_CAT aktiviert wird oder nie. Es lohnt sich, den Namen zu kennen, weil er im Zentrum einer echten Meinungsverschiedenheit darüber steht, wie viel Programmierbarkeit Bitcoin haben sollte, und weil Vorschläge, hashbasierte Signaturen für eine Zukunft mit Quantencomputern hinzuzufügen, meist über ihn laufen.

Häufig gestellte Fragen

Warum wurde OP_CAT ursprünglich deaktiviert?

Weil nichts begrenzte, wie groß ein Stapel-Element werden konnte. Wird ein Element wiederholt mit sich selbst verkettet, verdoppelt sich seine Größe jedes Mal, was den Arbeitsspeicher eines Nodes erschöpfen konnte. Die aktuelle Obergrenze von 520 Bytes pro Element beseitigt dieses Risiko.

Erfordert die Reaktivierung von OP_CAT einen Hard Fork?

Nein. In tapscript wird die Opcode-Nummer bereits als OP_SUCCESS behandelt, sodass alte Nodes Skripte akzeptieren, die sie enthalten. Ihr ein tatsächliches Verhalten zu geben, schränkt nur ein, was diese Nodes ohnehin erlauben, was die Änderung zu einem Soft Fork macht.

Weiterlesen

Verwandte Begriffe

Mehr zum Thema Protokoll und Upgrades

Diese Seite auf Englisch lesen