512 / 736OP_RET

OP_RETURN

Nulldaten und nachweislich nicht ausgebbare Ausgaben

Mit OP_RETURN lassen sich Daten an eine Bitcoin-Transaktion anhängen, etwa der Fingerabdruck eines Dokuments. Dabei entsteht ein nicht ausgebbarer Ausgang. Der Blockchain-Eintrag allein beweist aber weder den Wahrheitsgehalt einer Nachricht noch ihre Urheberschaft.

OP_RETURN ist eine Anweisung in Bitcoin Script mit der Kodierung 0x6a. Am Anfang eines Ausgangsskripts macht sie den Ausgang nachweislich unausgebbar: Keine Signatur kann ihn entsperren. Dahinter können Daten stehen. Es ist keine Zahlungsadresse und kein Geldtransfer an einen Empfänger, sondern eine Möglichkeit, Daten in einer Transaktion festzuhalten.

Jana möchte eine Information anhängen, statt jemandem einen weiteren Betrag zu senden. Deshalb beginnt sie einen Ausgang mit OP_RETURN. Bei einem Ausgabeversuch würde die Ausführung dieser Anweisung die Skriptprüfung scheitern lassen, unabhängig von der Signatur. Technisch heißt das Ausgangsskript scriptPubKey. Entscheidend sind Position und Ausführung: Dasselbe Byte innerhalb eingefügter Daten ist keine ausgeführte Anweisung. Auch OP_RETURN in einem nicht ausgeführten Zweig ist etwas anderes als OP_RETURN am Anfang. Den Namen oder das Byte irgendwo in einer Transaktion zu finden reicht deshalb nicht. [1] [5]

Bitcoin Core ordnet die übliche Form als NULL_DATA ein. Der Name bedeutet nicht, dass keine Daten enthalten sind. Die Funktion Solver verlangt zunächst OP_RETURN und danach einen Teil, der IsPushOnly besteht, also nur Anweisungen zum Einfügen von Daten enthält. Das kann Text, ein Hash als kurzer berechneter Fingerabdruck oder ein Eintrag für ein anderes Protokoll sein. Die Einordnung bestätigt weder die Bedeutung der Nachricht noch allein die Aufnahme in den Warteraum eines Knotens. Sie begründet auch nicht automatisch Dateieigentum, Urheberschaft oder Rechtswirkung; dafür braucht es weitere Regeln und Belege. [3]

Knoten führen den UTXO-Satz, die Sammlung noch nicht ausgegebener und weiterhin nutzbarer Ausgänge. Beginnt ein Ausgang mit OP_RETURN, steht fest, dass niemand ihn ausgeben kann. IsUnspendable erkennt ihn, und AddCoin nimmt ihn nicht in den UTXO-Cache auf. Das spart laufende Zustandsverwaltung, nicht den Platz in der gesamten Historie: Die bestätigte Transaktion bleibt im Block, ihre Daten werden übertragen und in historischen Kopien aufbewahrt. Der Ausschluss aus UTXO löscht keine Daten. Ein diesem Ausgang zugewiesener Geldbetrag ist zudem keine Minerbelohnung. Er ist unausgebbar; eine spätere Signatur kann ihn nicht retten. [2] [6] [1]

Konsensregeln bestimmen, welche Blöcke ein Knoten als gültig betrachtet. Seine lokale Richtlinie entscheidet dagegen, was in den Mempool gelangt, den Warteraum unbestätigter Transaktionen, und was weitergeleitet oder zum Mining angeboten wird. So schützt er seine Ressourcen. Betreiber können unterschiedliche Einstellungen wählen: Eine nicht weitergeleitete Transaktion muss in einem Block nicht gegen den Konsens verstoßen. Auch die Mempool-Aufnahme verspricht keine Bestätigung. datacarriersize setzt ein lokales Datenbudget; die Option ändert weder selbst die Blockgültigkeit noch löscht sie bestätigte Inhalte. [8]

Der oft zitierte frühere Standard erlaubte 1 Datenausgang mit einem Skript bis 83 Byte, meist 80 Byte Inhalt plus Anweisungen. Bitcoin Core 30.0 erhöhte den Standardwert von datacarriersize auf 100000 und erlaubte mehrere Datenausgänge. Der Code zieht die Länge jedes vollständigen scriptPubKey von einem gemeinsamen Budget ab. Er zählt weder nur die Nachricht noch das äußere Feld, das die Skriptlänge angibt. Andere Transaktionslimits bleiben bestehen. Die Einstellung 83 stellt deshalb das frühere Budget wieder her, nicht die Beschränkung auf einen Ausgang. Die Zahlen beschreiben eine bestimmte Versionsänderung, kein unveränderliches Netzwerkgesetz. [7] [4] [8]

Jana kann den Hash ihres Dokuments statt der Datei in OP_RETURN schreiben. Legt sie später das Original vor, lässt sich der Fingerabdruck mit demselben Verfahren erneut berechnen und vergleichen. Dafür muss sie die genauen Dateibytes und das Verfahren erhalten; der Fingerabdruck ersetzt die Datei nicht. Eine Übereinstimmung belegt weder wahren Inhalt noch Janas Urheberschaft oder den genauen Erstellungszeitpunkt. Öffentliche Einträge können außerdem Identitäten verknüpfen, und auch gehashte Angaben sind nicht automatisch privat. Die Kosten hängen von der ganzen Transaktion und der Nachfrage nach Blockplatz ab, nicht allein von der Nachrichtenlänge. [1] [8]

Es gibt eine wichtige, genau definierte Ausnahme zu gewöhnlichen Anwendungsnachrichten. BIP 141 nutzt OP_RETURN in der Coinbase, der ersten Transaktion eines Blocks, für ein Witness Commitment: eine kryptografische Bindung an Begleitdaten zur Transaktionsprüfung. Der entsprechende scriptPubKey ist mindestens 38 Byte lang und beginnt mit 0x6a24aa21a9ed. Passen mehrere Ausgänge zum Muster, gilt der höchste Index, also der letzte passende Ausgang in der Reihenfolge. Enthält der Block keine Witness-Daten, ist das Commitment optional. Hier prüft das Netzwerk eine festgelegte Struktur; es bestätigt dadurch nicht den Wahrheitsgehalt beliebiger Texte hinter OP_RETURN. [9]

Zunächst muss klar sein, auf welchen Client, welche Version und welche Konfiguration sich das Limit bezieht. Dann wird die konkrete Transaktion dekodiert und ihr scriptPubKey von den umgebenden Feldern der Bytekodierung getrennt betrachtet. mempool_datacarrier.py zeigt Grenzfälle der Implementierung; dieser Artikel führt den Test nicht aus. BIP 110 schlug zusätzliche Konsensbeschränkungen vor, ist aber ein abgeschlossener Vorschlag und keine mit datacarriersize eingeschaltete Regel. Eine Beschreibung älterer Software verspricht kein identisches Verhalten aller Knoten oder künftiger Versionen. Eine Einstellung und eine tatsächliche Bestätigung sind unterschiedliche Informationen. [10] [8] [11]

Beispiel · OP_RET

Warum Nachricht und Skript unterschiedlich lang sind

Jana möchte 32 Byte Daten anhängen. Ihr einfaches Skript besteht aus OP_RETURN, einer direkten Einfügeanweisung und den Daten: 1 + 1 + 32 = 34 Byte. Das ist die Länge des scriptPubKey. Betragsfeld und Skriptlängenfeld sind andere Teile der Ausgangskodierung und zählen hier nicht mit. Das Datenbudget misst das Skript, die Gebühr wird hingegen für die gesamte Transaktion beurteilt. Das Beispiel sendet nichts und belegt keine Annahme durch einen bestimmten Knoten.

Für ein möglichst vollständiges Bild lies diesen Eintrag zusammen mit Bitcoin Script, Transaktion, UTXO, Mempool, Transaction Fees, BIP 110. Auf diesen Eintrag verweisen außerdem Runes, BRC-20.

01Bekommt der Miner Geld, das ich diesem Ausgang zuweise?

Nein. Ein Betrag in einem nachweislich unausgebbaren Ausgang bleibt unausgebbar. Die Gebühr ist die Differenz zwischen dem Wert aller Eingänge und aller Ausgänge. Geld einem OP_RETURN-Ausgang zuzuweisen macht es nicht von selbst zur Gebühr.

02Ändert eine größere erlaubte Nachricht die Regeln des gesamten Bitcoin?

Nicht unbedingt. Ein Knoten kann lokal mehr Transaktionen weiterleiten, ohne die Regeln für gültige Blöcke zu ändern. Zu unterscheiden sind Clienteinstellungen, Konsensregeln und die tatsächliche Bestätigung einer konkreten Transaktion.

DOC · 001Bitcoin Developer Reference — OP_RETURNDokumentation DOC · 002Bitcoin Core — script.h IsUnspendablePrimärquelle DOC · 003Bitcoin Core — solver.cpp NULL_DATAPrimärquelle DOC · 004Bitcoin Core 30.0 release notesPrimärquelle DOC · 005Bitcoin Core 30.0 — InterpreterPrimärquelle DOC · 006Bitcoin Core 30.0 — CoinsPrimärquelle DOC · 007Bitcoin Core 29.0 — Policy implementationPrimärquelle DOC · 008Bitcoin Core 30.0 — Policy implementationPrimärquelle DOC · 009BIP 141 — Witness commitmentSpezifikation DOC · 010Bitcoin Core 30.0 — Datacarrier testsPrimärquelle DOC · 011BIP 110 — SpecificationSpezifikation
Überarbeitet: Quellenbasiert · Keine Anlageberatung