<iframe src="https://podcasters.spotify.com/pod/show/blocktrainer/embed/episodes/BBP-Interview-11---BitVM-mit-Robin-Linus-e2alf19/a-aag2a3n" width="100%" frameborder="0" scrolling="no"></iframe>

Ein kürzlich veröffentlichtes Whitepaper des Bitcoin-Entwicklers Robin Linus mit dem Titel "BitVM: Compute Anything on Bitcoin", also "Berechne alles auf Bitcoin", sorgt seitdem für viel Aufmerksamkeit und Begeisterung innerhalb der Bitcoin-Community – aber auch darüber hinaus. Durch die clevere Nutzung von Funktionen, die seit dem Taproot-Update zur Verfügung stehen, soll die Verifizierung von beliebig komplexen Smart Contracts, also besonderen Bedingungen zur Ausgabe einer bestimmten Menge Bitcoin, sichergestellt werden können.

Das Besondere: Eine Änderung der Konsensregeln, durch eine Hard- oder eine Soft-Fork, ist dafür nicht notwendig. Die komplexeren Berechnungen selbst finden nämlich nicht direkt im Bitcoin-Netzwerk statt. Lediglich die Behauptung über das Ergebnis jener komplexen Berechnung kann anschließend im Netzwerk verifizierbar angefochten werden, durch Bedingungen, auf die man sich vorab geeinigt hat.

Was es genau damit auf sich hat, wie die technische Umsetzung aussieht und wo die Vor- und Nachteile von BitVM liegen, nehmen wir im folgenden etwas genauer unter die Lupe. Damit sollten sich auch einige Missverständnisse klären, die aktuell auf Plattformen wie 𝕏 & Co. umher geistern. Viel Spaß bei diesem Deep-Dive!

"Jede berechenbare Funktion kann auf Bitcoin verifiziert werden"

@robin_linus auf 𝕏

Turing Vollständigkeit

Ein häufig wild durch die Gegend geworfenes Konzept ist das der "Turing Vollständigkeit" oder auch "Turingmächtigkeit", das in Anlehnung an die Turingmaschine, benannt nach Alan Turing, eine Aussage über die Mächtigkeit eines Computersystems oder allgemein einer Sprache trifft. Wir wollen an dieser Stelle aber nicht in die Berechenbarkeitstheorie der theoretischen Informatik abdriften, sondern uns nur auf einen vereinfachten Zusammenhang einigen: Die heute "gängigen" Programmiersprachen, wie beispielsweise C++, Java oder Python gelten als Turing vollständig, was so viel bedeutet wie: Man kann alle Berechnungen, die von einer Turingmaschine bzw. irgendeinem Computer ausgeführt werden können, auch in diesen Sprachen umsetzen. Wie einfach das in der Realität tatsächlich ist, steht auf einem anderen Blatt, aber zumindest theoretisch sind diese Sprachen dafür ausreichend mächtig.

Für eine kleine, besondere Sprache ist dies allerdings nicht der Fall: Bitcoin Script. Sämtliche Outputs im Bitcoin-Netzwerk sind mit einem kleinen Programm versehen, dessen Ausgang darüber entscheidet, ob die entsprechenden BTC ausgegeben werden dürfen, oder nicht. Hier setzt man ganz bewusst auf einen sehr eingeschränkten Befehlssatz sowie limitierten Speicherplatz, um den Teilnehmern des Bitcoin-Netzwerks keine utopisch komplizierten und rechenintensiven Überprüfungen von Transaktionen zuzumuten. Genau daran wird BitVM auch nichts ändern, da stattdessen an anderer Stelle, nämlich vor allem außerhalb des Bitcoin-Netzwerks angesetzt wird.

Das Grundprinzip

Fast schon vergleichbar mit dem Sicherheitsmodell eines Lightning-Kanals setzt man mit BitVM nicht auf direkte Verifizierung, sondern geht stattdessen davon aus, dass ein tatsächlicher Betrugsversuch, stets vom Betroffenen angefochten wird. Zur Erinnerung: Versucht ein Teilnehmer eines Lightning-Kanals sein Gegenüber zu betrügen, z.B. indem ein veralteter Zustand des Kanals im Bitcoin-Netzwerk veröffentlicht wird, gibt es einen vorab festgelegten Mechanismus, mit dem der Betrüger bestraft werden kann.

Dieses Grundprinzip wird mit BitVM auf die Spitze getrieben. Im Idealfall finden sämtliche Berechnungen abseits des Bitcoin-Netzwerks, also z.B. direkt zwischen zwei Teilnehmern, statt. Bei diesen "Berechnungen" kann es sich um alles Mögliche handeln. Beispielsweise könnte man eine Runde Schach spielen, bei dem der Gewinner eine bestimmte Menge Bitcoin gewinnen kann. Wie sinnvoll dieses konkrete Beispiel wirklich ist, sei mal dahin gestellt, es geht zunächst nur um das Verständnis.

Das Problem bisher: Was macht man als Sieger des Schachspiels, wenn einem der Gewinn verwehrt wird? Dieses grundsätzliche Vertrauensproblem bei komplizierten Vereinbarungen, muss irgendwie umgangen werden, indem man das Bitcoin-Netzwerk als unabhängige Partei hinzuzieht, ohne dieses mit der eigentlichen Komplexität – also dem Schachspiel – zu belasten. Das ist zwar alles andere als einfach, doch mit BitVM wird genau hierfür ein eleganter, wenn auch komplizierter, Ansatz vorgeschlagen.

Bit für Bit

An dieser Stelle tauchen wir etwas tiefer in die technischen Hintergründe von BitVM ein, doch keine Angst, wir landen gleich bei einem hoffentlich nachvollziehbaren Fazit!

Alles, was auf unseren Computern geschieht, kann auf zwei ganz besondere Zahlen heruntergebrochen werden: Null und Eins. Jede noch so komplexe Funktion, jede Darstellung auf unseren Bildschirmen und selbst dieser Artikel liegt irgendwo in aufeinanderfolgenden Nullen und Einsen vor. Jede Programmlogik, die natürlich auch nur aus Nullen und Einsen besteht, kann des Weiteren mit recht einfachen logischen Schaltungen dargestellt werden, je nach Aufbau der Schaltung mehr oder weniger effizient.

Auch die Bitcoin-Script-Sprache bietet einige logische Operationen an, unter anderem auch die NAND-Verknüpfung, die im Paper exemplarisch zur Erläuterung verwendet wird. Diese konkret zu verstehen, ist für den groben Überblick gar nicht entscheidend, wir kürzen daher ab: Theoretisch sind durch das Aneinander schalten solcher Gatter sämtliche logischen Zusammenhänge Bit für Bit umsetzbar, es ist halt nur ziemlich kompliziert und wird schnell sehr, sehr unübersichtlich.

Eine Schaltung mit NAND-Gattern | Quelle: bitvm.org

Seit dem Taproot-Update ist es durch ein bisschen "Krypto-Magie" allerdings möglich, sehr viele verschiedene "Pfade" in einem Script, also verschiedene Bedingungen und Abläufe, baumartig in einem gemeinsamen Fingerabdruck zusammenzufassen (Stichwort MAST). Das reduziert den in Bitcoin-Transaktionen benötigten Speicherplatz bei einem komplexen Script enorm, da jeweils nur der entscheidende Pfad tatsächlich veröffentlicht wird.

All das läuft jetzt folgendermaßen zusammen: Wenn sich unsere beiden Teilnehmer von vorhin auf ihr gemeinsames Schachspiel einigen, stellen sie die logischen Abläufe in einem solchen, riesigen, Baum an verschiedenen Möglichkeiten, Schritt für Schritt dar. An jeden Schritt werden dabei Bedingungen geknüpft, wer, wann, wie viel Bitcoin erhält und wer nicht. Diese Knüpfung an die Ausgabebedingungen wird gleich ausschlaggebend sein, warum das alles überhaupt funktioniert.

Nicht vergessen: Diese komplexen Berechnungen und Vorbereitungen finden vorab und außerhalb des Bitcoin-Netzwerks statt.

Challenge? Response!

Das in einem Taproot-Output auf einen einzigen Hashwert zusammengefasste Script ist nun einsatzbereit. Halten sich beide Teilnehmer an die Regeln ihres Schachspiels, kann der Gewinner sich einfach seine Belohnung über einen simplen Ausgabepfad im Script auszahlen. Beide Parteien sind glücklich und auf der Bitcoin-Blockchain landet, was den Speicherplatz betrifft, eine völlig normale Transaktion.

Doch um die eigentliche Sicherheit von BitVM zu beurteilen, müssen wir natürlich vom schlimmsten Fall ausgehen: Einer der Teilnehmer versucht den anderen zu betrügen. An dieser Stelle würde ein vorher festgelegtes (und durch die Teilnehmer signiertes) Challenge-Response Spiel losgetreten werden, bei dem die aufgestellte Behauptung (im Schachspiel gewonnen zu haben) im Wechsel durch die verifizierende Partei infrage gestellt bzw. widerlegt werden kann. Wenn die Behauptung tatsächlich falsch ist, wird der Betrogene stets in der Lage sein, seinen Vertragspartner zu widerlegen bzw. zu bestrafen, was den Anreiz für einen Betrug offensichtlich extrem mindert – ähnlich wie auch im Lightning-Netzwerk. Auch bei einem Betrugsversuch würden im Bitcoin-Netzwerk theoretisch nur eine Handvoll mehr Transaktionen landen, es würde also keine unverhältnismäßige Flut an Transaktionen ausgelöst werden.

Wenn auch indirekt, können somit tatsächlich beliebige Berechnungen, vertrauenslos über das Bitcoin-Netzwerk verifiziert werden, vorausgesetzt der oder die Vertragspartner sind stets in der Lage, vermeintliche Regelbrüche anzufechten.

Viele, viele Berechnungen

Der Nachteil ist an dieser Stelle wahrscheinlich bereits offensichtlich: Die komplexen Berechnungen finden zwar nicht im Bitcoin-Netzwerk statt, dafür aber umso intensiver und komplexer außerhalb. Die Größenordnung, über die wir hier sprechen, ist tatsächlich enorm. Milliarden an vorberechneten Zwischenschritte sind schnell auch für recht simple Smart Contracts notwendig, ganz zu schweigen von den unzähligen Signaturen, die mindestens alle paar Schritte notwendig sind, um im Notfall eine möglichst akkurate Konfliktlösung zu ermöglichen.

Robin Linus räumt diesen Nachteil auch ein, und stellt klar, dass es zunächst erst einmal darum ging, das Konzept an sich vorzustellen:

Das Modell ist so konzipiert, dass es lediglich aufzeigt, dass dieser Ansatz universelle Berechnungen auf Bitcoin ermöglicht. Für praktische Anwendungen sollten wir jedoch effizientere Modelle in Betracht ziehen.

Aus dem Paper

In jedem Fall ist der Vorschlag technisch hoch spannend und zeigt wieder einmal mehr, dass sämtliche Anwendungsfälle, sofern es eine ausreichende Nachfrage für sie gibt, auf oder mit Bitcoin realisiert werden können. Ob man diese Anwendungsfälle für sinnvoll erachtet oder nicht, spielt dabei vorerst keine Rolle. Einer der Vorteile von BitVM ist nämlich auch, dass man das Thema, sollte man sich nicht dafür interessieren, getrost ignorieren kann. Schließlich ist nicht einmal eine Änderung der Konsensregeln notwendig.

BitVM ist zwar zunächst nur ein Proof-of-Concept, doch es wird sicher nicht lange dauern, bis die ersten komplexeren Spielereien auch in der Praxis umgesetzt und auch erste Verbesserungen vorgeschlagen werden, was die Effizienz des Ansatzes betrifft. Es heißt also, gespannt zu bleiben!