Website-Icon BitcoinBlog.de – das Blog für Bitcoin und andere virtuelle Währungen

„Theoretisch könnte eine Blockchain durch UTXO-Commitments lernen, zu vergessen …“

Der Bitcoin-Cash-Entwickler Tomas van der Wansem hat vor kurzem ein UTXO-Commitment ins Testnet gestellt. Wir reden mit ihm über die als Meilenstein der Skalierbarkeit diskutierte Lösung.

Tomas van der Wansem ist Entwickler von Bitcrust, einer noch nicht fertigen Implementierung von Bitcoin in der Programmiersprache Rust. Tomas ist einer der aktivsten Entwickler von Bitcoin Cash (BCH), und er scheint ein umtriebiger Geist zu sein, der sich auf die verschiedensten Themen stürzt. Aktuell arbeitet er mit den anderen BCH-Entwickler an UTXO-Commitments, einem Werkzeug, das massiv dabei helfen kann, eine Blockchain zu skalieren. Vor kurzem hat er die erste Implementierung in die Blockchain im Testnet geschrieben. Wir haben mit dem Amsterdamer geskypt, um zu erfahren, was es damit auf sich hat.

Was ist die Idee hinter UTXO-Commitments?

UTXO ist die Abkürzung für „unspent outputs“ und meint die Münzen bei Bitcoin, die ausgegeben werden können. Das UTXO-Set ist die Gesamtheit dieser Münzen, es ist der Zustand aller Coins, also sämtliche Guthaben von Adressen. Es wird benötigt, um neue Blöcke und neue Transaktionen zu validieren. Die Idee von UTXO-Commitments ist es nun, den Hash des UTXO-Sets zu berechnen und in jeden neuen Block zu stecken. Es gibt verschiedene Methoden, um das zu machen.

Welchen Nutzen hätte das?

Es gibt zwei Gründe, warum UTXO-Commitments nützlich sind. Erstens muss ein neuer Full Node damit nicht mehr die gesamte Blockchain herunterladen, sondern nur das UTXO-Set. Heute muss er die gesamte Blockchain laden, um das UTXO-Set zu validieren und aufzubauen. Wenn es ein UTXO-Commitment gibt, hat man durch die Hash einen Beweis, ob ein UTXO-Set korrekt ist. Also kann man es einfach herunterladen und prüfen. Dadurch kann man einen Node viel schneller starten, und theoretisch wäre es sogar in Ordnung, wenn die historische Blockchain „vergessen“ wird.

Der zweite Nutzen ist, dass man in UTXO-Commitments einen Beweis unterbringen kann, dass ein UTXO Teil des Sets ist. Um heute zu prüfen, ob die Inputs einer Transaktion valide sind, muss man sie mit dem gesamten UTXO-Set abgleichen. Wenn wir einen Beweis dafür hätten, dass ein UTXO ein Teil des Sets ist, bräuchte man für diese Prüfung nicht mehr das gesamte UTXO-Set. Das könnte helfen, eine ganz neue Art von Light-Clients zu entwickeln.

Das UTXO-Set bei Bitcoin Cash ist derzeit etwa 2 Gigabyte groß. Ich kann mir vorstellen, dass es eine Menge Arbeit macht, das zu hashen und zu prüfen …

Oh ja, es ist eine Menge an Daten, und es dauert einige Minuten, es zu hashen. Die Herausforderung ist, dass man das UTXO-Commitments so bildet, dass es nicht für jeden Block komplett neu berechnet werden müssen, sondern dass man es, nachdem es einmal gebildet wurde, einfach nur updatet.

Die Idee ist nicht neu. Das Problem ist, dass es viele Methoden gibt, es zu tun, und bisher gab es noch keine Einigung, welche davon die beste ist. Wir bauen auf einem Vorschlag des Core-Entwicklers Pieter Wuille auf, den wir verbessern. Die Methode benutzt keine Merkle Trees oder andere kryptographische Bäume, sondern ist „flach“. Wir nehmen einfach die Hash von jedem UTXO, verbinden sie und errechnen die Summe davon. Anstatt einer normalen Addition benutzen wir dagegen eine Gruppenoperation von elliptischen Kurven, das hat einen sehr ähnlichen Effekt, ist aber sicherer.

Weißt du, warum die Core-Entwickler den Vorschlag von Pieter Wuille nicht weiter entwickelt haben?

Ich weiß es nicht genau, aber ich vermute, dass sie besorgt waren, dass es nicht schnell genug sein wird, wenn das UTXO-Set weiter wächst. Wir haben aber eine Methode gefunden, es zu verbessern. Ich denke auch, dass es etwas mit Prioritäten zu tun hat. Konzeptionell passen UTXO-Commitments besser zur Roadmap von Bitcoin Cash.

Du hast vor kurzem ein UTXO-Commitments ins Testnet von Bitcoin Cash geschrieben. Wie weit ist die Entwicklung bereits vorangeschritten?

Der Code ist derzeit noch im Peer-Review mit den Entwicklern von BitcoinABC und BitcoinXT. Bitcoin Unlimited wird es sich auch bald anschauen. Das Commitment im Testnet war nur ein erster Test, und es ist auch noch nicht Teil der Konsensregeln im Testnet. Um die Idee des schnellen Synchronisierens zu verwirklichen, müssen wir einige Schritte weiter gehen. Der erste ist die Entwicklung der Commitments selbst, an denen wir derzeit arbeiten, aber um schnell zu synchronsieren, brauchen wir noch P2P-Nachrichten, die es erlauben, UTXOs zu übertragen, und wir müssen auch noch den Synchronisierungs-Modus entwickeln …

Und die neue Art der Light Wallets, wann ist sie zu erwarten?

Die Version, die wir aktuell erarbeiten, ist nur für das schnelle Synchronisieren geeignet, aber nicht für die Light Wallet. Es gibt Entwürfe, die beides können, etwa die von Amaury vorgeschlagenen Merklix Trees, aber sie sind noch in einer frühen Phase der Entwicklung und verlangen den Nodes sehr viel Rechenleistung ab. Wir finden alle, dass neue Light Wallets toll wären, aber das schnelle Synchronisieren ist derzeit wichtiger. Also konzentrieren wir uns zunächst darauf.

Kannst du abschätzen, ab wann das schnelle Synchronisieren möglich sein wird?

Oh, grob geschätzt … Im November werden wir Bitcoin Cash per Hardfork upgraden, und ich hoffe, dass wir damit UTXO-Commitments in die Chain bringen werden. Ich habe es bisher im Testnet zwar in die Coinbase geschrieben, aber wir brauchen ja noch die Regel, dass alle Miner und Nodes die  UTXO-Commitments in der Coinbase validieren. Wenn wir das im November in die Chain bringen, wäre das ein wichtiger Schritt. Die nächsten würden danach folgen.

Was meinst du, wie weit kann man mit UTXO-Commitments skalieren?

Das ist eine schwierige Frage. Es ist derzeit schon ziemlich ärgerlich, dass man mehr als 100 Gigabyte an Daten herunterladen muss. Es ist eine Last dabei, einen Node zu starten, und ein wichtiger Flaschenhals bei der Skalierbarkeit. Auf den ersten Blick hilft es nur beim Synchronsieren eines Nodes, aber wenn man sich anschaut, wofür die Nodes ihre Bandbreite hergeben, etwa den Upload, stellt man fest, dass ein großer Teil dafür verwendet wird, um die alten Blocks an neue Nodes zu verteilen. UTXO-Commitments können also auch hierbei helfen. Aber konkrete Angaben, wie weit man skalieren könnte, kann ich nicht abgeben.

Tomas, vielen Dank für die vielen Infos!

Die mobile Version verlassen