Wieder einmal kommt es zu seltsamen Vorkommnissen und verschobenen Zahlen innerhalb des Ordinals-Protokolls. Noch vor wenigen Wochen sind über 1200 Inscriptions, also Bilder, Texte und sonstige Daten, vermeintlich "verloren gegangen", da diese nicht korrekt erkannt wurden, obwohl eigentlich alle formalen Anforderungen erfüllt waren. Natürlich trägt das Bitcoin-Netzwerk dabei keine Schuld, und streng genommen ist auch nichts verloren gegangen. Die Spezifikation des Ordinals-Protokolls hat lediglich einen bestimmten Sonderfall nicht beachtet, wodurch etwas Verwirrung entstand.

Ein ähnlicher Vorfall hat sich gestern ereignet, als der Twitter-User @supertestnet eine ziemlich seltsame Transaktion, die gar keine Bitcoin versendet und auch keine Gebühr aufweist, veröffentlicht und damit die Nummerierung der Inscriptions erneut ins Wanken gebracht hat.

Schauen wir uns die außergewöhnliche Transaktion also etwas genauer an, wie diese überhaupt gültig sein kann und was das Ganze mit dem Ordinals-Protokoll zu tun hat!

Die Transaktion

Man muss nicht lange nach ungewöhnlichen Details suchen, wenn man sich besagte Transaktion etwas genauer ansieht:

Quelle: mempool.space

Es wird nämlich nichts ausgegeben. Der einzige Input der Transaktion hat einen Wert von 0 BTC, und dementsprechend geht auch der neu erstellte Output komplett leer aus. Auch ergibt sich daraus eine fehlende Transaktionsgebühr von 0 sat/vB, denn schließlich bleibt nichts in der Transaktion potenziell für die Miner übrig.

Trotzdem wurde die Transaktion als gültig anerkannt und im Block 788200 bestätigt. Wie ist das möglich?

Mempool Policy

Das Bitcoin-Netzwerk hat viele Regeln, die darüber entscheiden, ob eine Transaktion, und damit auch ein Block, gültig ist. Diese Regeln bezeichnen wir im folgenden als Konsensregeln, denn sie machen das Bitcoin-Netzwerk eigentlich erst zu dem, was es ist. Würde man eine Konsensregel einfach so ändern, verliert man höchstwahrscheinlich den Anschluss an das restliche Netzwerk – man verliert den Konsens.

Es gibt aber auch noch eine Vielzahl an weniger kritischen Regeln, die nicht über die Gültigkeit von Transaktionen entscheiden, sondern nur darüber, ob diese an andere Teilnehmer weitergeleitet werden sollen oder nicht. Da es sich nicht um in Stein gemeißelte Regeln handelt, sondern eher um Richtlinien, die von jeder Bitcoin-Node nach Belieben angepasst werden können, spricht man häufig auch von Mempool Policies.

Eine bekannte Policy ist beispielsweise die minimale Transaktionsgebühr, die aktuell standardmäßig bei 1 sat/vB liegt. Eine Transaktion mit einer kleineren Gebührenrate würde von einer normalen Bitcoin-Node also abgelehnt, d.h. nicht in den eigenen Mempool aufgenommen und nicht weitergeleitet werden. Formal ungültig ist die Transaktion deswegen aber nicht. Auf dem herkömmlichen Weg kann man eine solche Transaktion zwar nicht veröffentlichen, da sie von den allermeisten Nodes abgelehnt werden würde, aber man könnte sie beispielsweise direkt einem Miner geben, und ihn höflich darum bitten, sie zu bestätigen.

Bei unserer seltsamen Transaktion von oben ist genau das passiert. Normalerweise hätte die Transaktion nie effektiv veröffentlicht werden können, da unter anderem die nicht vorhandene Gebühr und der wertlose neue Output gegen die Standard-Einstellungen von nahezu allen Bitcoin-Nodes sprechen. "Out-of-band" direkt mit der Hilfe eines Miners war es aber möglich: Der Ersteller der Transaktion gibt an, einfach beim F2Pool nachgefragt zu haben – und das hat wohl funktioniert.

Mit der Transaktion (genauer gesagt sind es sogar zwei Transaktionen) ist technisch also alles in Ordnung.

The Breaker of JPEGs

Doch was hat das alles mit dem Ordinals-Protokoll zu tun? Ganz einfach: Die seltsame Transaktion enthält eine Inscription in ihrem Input:

ordtext/plain;charset=utf-8'you will use soma and you will like it'

Auf den ersten Blick handelt es sich um eine Anspielung auf Aldous Huxleys dystopischen Roman "Brave new World". Gemeint ist aber wahrscheinlich ein neuer Ansatz namens Soma, um "Bitcoin NFTs" effizienter mit einer sogenannten Spacechain zu nutzen, ohne übermäßig viel Speicherplatz auf der Bitcoin Blockchain zu verbrauchen. Darauf näher einzugehen, würde an dieser Stelle aber den Rahmen sprengen.

Denn das Interessante an dieser Inscription ist: Sie sollte eigentlich gar nicht gültig sein, denn es wird schließlich nichts "inskribiert", da der Output komplett leer bzw. wertlos ist. Der eigentliche Sinn hinter einer Inscription ist schließlich, bestimmte Daten an einen Satoshi zu "knüpfen", damit man diesen dann repräsentativ für die Daten durch die Gegend senden kann. Das ist hier nicht der Fall, und trotzdem hat die Ordinals-Wallet die Inscription als solche anerkannt und mit in die "offizielle" Nummerierung aufgenommen.

An dieser Stelle könnte man die gleiche Diskussion lostreten, wie auch schon damals bei den "verlorenen Inscriptions". Wie soll man mit der Nummerierung fortfahren?

Der Erfinder des Ordinals-Protokolls, Casey Rodarmor, meldet sich in einer Diskussion auf GitHub zu Wort:

"Wirklich eine merkwürdige Transaktion! Mir wurde gesagt, das wurde von supertestnet gefunden, also schöne Entdeckung von ihm!

Es sollte nicht möglich sein, Sats zu inskribieren, die man nicht besitzt, das ist also ein Bug. Allerdings würde das Beheben des Fehlers, also diese Inscription zu ignorieren, die Nummerierung der Inscriptions danach verändern. Ich bin mir ehrlich nicht sicher, was wir tun sollten!"

Casey Rodarmor auf GitHub

So oder so wird das Problem wohl nicht an dieser einen Transaktion hängen bleiben. Denn der "Breaker of JPEGS", wie er sich selbst nennt, hat bereits ein kleines Tool veröffentlicht, um solche mehr oder weniger fehlerhafte Inscriptions zu reproduzieren.

"Ich habe ein Tool veröffentlicht, um den Off-By-One Fehler in der Ordinal-Theorie weiter zu erhöhen: [...]

Bitte folgt der Installations- und Benutzungsanleitung und lasst mich wissen, ob es bei euch funktioniert.

Beachtet, dass, falls es nicht funktioniert, ihr 10.000 sats verliert und das euer Fehler ist. Lasst und Dinge kaputt machen."

@super_testnet auf Twitter

Die Verschiebung der Inscription-Nummerierung könnte also noch weiter wachsen. Bereits damals zogen wir ein klares Fazit, welches sich hiermit noch weiter bestätigt: Sich zu sehr auf eine Nummerierung zu stützen, die auf der Bitcoin Blockchain selbst gar nicht existiert, ist unsinnig. Konflikte und seltsame Ereignisse sind fast schon vorprogrammiert, vor allem weil es sich beim Ordinals-Protokoll nach wie vor um ein junges und fehleranfälliges Protokoll handelt.