Newsticker

Bitcoin, ganz einfach: Was ist das UTXO – und warum ist es so wichtig?

Bitcoin Basics

Pocket Change. Bild von Stewart Williams via flickr.com. Lizenz: Creative Commons

Wir erklären, wie Bitcoin funktioniert. Diesmal wenden wir uns einem Schlüsselbegriff zu, der nicht allen geläufig, aber ungemein wichtig ist, um Bitcoin zu verstehen: Dem UTXO.

Einer der Begriffe, der bei Bitcoin immer wieder fällt, ist „UTXO“. Das steht für „Unspent Transaction Output“, was die Sache nicht eben viel klarer macht. Dabei ist das UTXO ein Schlüsselkonzept von Bitcoin. Was meint es?

Im Grunde ist ein UTXO eine Münze. Sie können sich das ganz bildlich vorstellen: Als eine Münze in Ihrem Geldbeutel. Immer dann, wenn Ihnen jemand Geld in Bitcoin gibt, geht eine Münze in Ihre Wallet, und immer dann, wenn Sie mit Bitcoin bezahlen, nehmen Sie eine solche Münze aus Ihrem elektronischen Geldbeutel. Wie im echten Leben sammeln sich in Ihrer Wallet verschiedene Münzen verschiedener Größen an, und Sie bezahlen, indem Sie mehrere Münzen verbinden. Wenn der Betrag nicht ganz passt (das macht er bei Bitcoin nie), bekommen Sie eine Münze mit dem entsprechenden Wechselgeld heraus.

Brauchen Sie ein Beispiel? Sie haben in Ihrem Geldbeutel zwei Münzen. Eine ist 0,015 Bitcoin groß, die andere 0,03. Wenn Sie nun etwas für 0,04 BTC kaufen, nehmen Sie die beiden Münzen und bilden eine Transaktion, die aus diesen beiden Münzen zwei „Outputs“ bildet: einen mit 0,04 BTC für den Empfänger, und einen mit 0,005 BTC für Sie. Mit diesem Vorgang werden die Münzen, die Sie bisher hatten, aufgelöst, und es bilden sich zwei neue Münzen. Man könnte sagen, jede Transaktion ist wie eine Hochofen: Sie nimmt Münzen, verschmelzt diese zu einer Masse, und haut daraus neue Münzen heraus.

UTXO ist also nur eine komplizierte Methode, um „Münze“ zu sagen. Für reine User reicht es, sich ein UTXO als eine Münze vorzustellen, die in Ihrer Wallet liegt.

Miner schlagen UTXO aus dem Block Reward

Schauen wir uns an, wie es technisch funktioniert. Dafür beginnen wir am besten bei den Miner. Denn diese erschaffen neue Münzen. Immer wenn sie einen Block finden, sagen wir Block #501777, dürfen sie eine sogenannte „Coinbase“-Transaktion bilden.

Die Coinbase-Transaktion im Blockexplorer von Blockchain.info. Die Transaktion hat ekeinen Input, daher erzeugt sie neues Geld.

Diese Transaktion erschafft eine neue Münze im Wert von 12,5 Bitcoin. Wobei Münze vielleicht das falsche Wort ist, passender wäre wohl „Barren“ oder „Block“, da die 12,5 Bitcoin etwa so viel wert sind wie 2 Kilogramm Gold. Gefunden wird der Block in der Regel von einem Mining-Pool.

Ein Goldbarren. Bild von Sprott Money via flickr.com. Lizenz: Creative Commons

Wie bei der traditionellen Münzherstellung schlägt der Pool den Block danach in viele kleine Münzen, die er dann in Umlauf bringt. Der Pool, der Block #501777 gefunden hat, überweist zum Beispiel später 12,513 Bitcoin an Dutzende von Adressen. Die ganze Transaktion passt nicht auf einen Screenshot, aber ein Teil sollte aussagekräftig genug sein:

Diese Transaktion zerschlägt den Mining-Reward in viele kleine Münzen. Quelle: Blockchain.info

Dabei erzeugt er Dutzende, wenn nicht hunderte kleinerer Münzen, die meisten mit einem Wert zwischen 0,001 und 0,15 Bitcoin, was sechs bis 900 Euro entspricht. Diese Münzen liegen dann auf den Wallets der teilnehmenden Miners oder werden von diesen weiter versendet, etwa auf Börsen.

Ein solcher Unspent Output (UTXO) wird einer Adresse „zugeordnet“. Das  bedeutet, dass man ihn nur dann übergeben kann, wenn man die Transaktion mit dem privaten Schlüssel signiert, aus dem die Adresse gebildet wurde. Eine Transaktion ist an sich, wie gesagt, nur der Vorgang, dass die Münzen als Input eingeschmolzen und als Output neu geprägt werden, was hier vor allem meint, dass man ihnen eine neue Adresse zuordnet – die des Empfängers.

„Wir definieren einen Coin als eine Kette digitaler Signaturen …“

Um zu prüfen, ob man mit „echtem Geld“ bezahlt wurde, kann man verifizieren, ob die Signatur korrekt und ob der Output durch den Input gedeckt ist. Wenn man es genau wissen will, kann man auch die Signaturen der vorhergegangenen Münzen prüfen, bis man schließlich bei dem Barren ist, den ein Miner erzeugt hat. Jede Münze trägt in sich alle Informationen, um ihre Geschichte bis zur Prägung aus dem von Minern gefundenen Bitcoin-Barren zurückzuverfolgen.

Daher schreibt Satoshi Nakamoto im Bitcoin-Whitepaper: „Wir definieren eine elektronische Münze (Coin) als eine Kette digitaler Signaturen. Jeder Eigentümer überträgt den Coin auf den nächsten, indem er einen Hash der vorherigen Transaktion sowie den öffentlichen Schlüssel des nächsten Eigentümers digital signiert und dies an das Ende des Coins anhängt. Der Empfänger der Zahlung kann die Signaturen verifizieren, um die Kette der Eigentümer zu verifizieren.“

Seht ihr? Bereits Satoshi nennt ein UTXO eine „Münze“. Im Bitcoin-Code wird UTXO übrigens auch „Coin“ genannt, englisch für Münze. Wenn man alle Münzen zusammennimmt, hat man das „UTXO-Set“, das Set aller unausgegebenen Outputs oder aller gültigen Münzen. Dieses UTXO-Set ist die minimale Datengrundlage, damit ein Bitcoin-Node in der Lage ist, unabhängig zu prüfen, ob eine Münze, die ihm geschickt wird, echt ist.  Derzeit ist das UTXO-Set etwa 3 Gigabyte groß; wer einen Full Node hat findet es im Ordner „Chainstate“.

Der Name „Chainstate“ ist ziemlich zutreffend: Denn an sich beschreibt das UTXO-Set den gegenwärtigen Zustand der Blockchain: das Ergebnis, auf dass all ihre Gigabyte an Transaktionen vom Genesis Block bis heute hinauslaufen. Das UTXO-Set dürfte der wichtigste Datensatz von Bitcoin sein. Es ist die Summe der bestehenden Münzen.

Eher kontraintuitiv

Wenn man Online-Banking gewohnt ist, erscheint ein UTXO-System kontraintuitiv und unnötig kompliziert. Für den User macht es es schwierig, sein Guthaben zu überblicken. Klar, die Wallet sammelt die ganzen Münzen, aber wenn man das Guthaben auf der Blockchain prüfen will, muss man jede einzelne Münze anschauen, was ziemlich schnell ziemlich unübersichtlich wird.

Zudem skaliert ein UTXO-System eher schlecht. Man kann ja nicht einfach die Guthaben anpassen, wie bei einem Account-System, sondern muss mehrere Münzen nehmen, um eine Transaktion zu bilden. Oft genug hat ein und dieselbe Adresse viele Münzen, und jede davon muss signiert werden. Wer schon mal auf eine Adresse hunderte von kleinen Münzen bekommen und diese zu einer Transaktion verschmolzen hat, weiß wovon ich rede – die Transaktion ist plötzlich mehrere Kilobyte groß, kostet einige Euro Gebühren, und es braucht zehn bis zwanzig Sekunden, bis die CPU alle eingehenden Münzen signiert hat. Dazu kommt noch hinzu, dass die Münzen so gut wie nie aufgehen, man also immer ein Wechselgeld bekommt, womit eine neue, oft auch noch recht kleine, Münze entsteht.

Das alles ist schon ziemlich unpraktisch. Warum hat sich Satoshi damals gegen das stärker intuitive und gebräuchliche Account- und für ein Münzsystem entschieden? Eine Antwort hat er darauf nie gegeben. Aber wir können ein wenig spekulieren.

UTXO vs. Accounts

Nicht jede Kryptowährung benutzt ein Münzsystem wie Bitcoin. Ethereum beispielsweise verwendet ein Account-System, bei dem nicht Münzen versendet, sondern die Guthaben der Accounts verändert werden. Dies macht es uns möglich, beide Systeme miteinander zu vergleichen.

Evan Klitzke schreibt in einem ausführlichen Artikel, dass ein Account-System mehrere Nachteile habe. Als erstes nennt er die mangelnde Privatsphäre: „Zwar kann jeder einen anonymen Account erzeugen, indem er ein Paar von privaten und öffentlichen Schlüsseln erzeugt, ohne seine echte Identität zu verraten. Aber diese Anonymität geht flöten, sobald man etwas an jemanden überweist.“

Ganz korrekt ist das nicht. Man sollte nämlich einwenden, dass einen (fast) nichts daran hindert, Accounts bei Ethereum so zu benutzen wie Adressen bei Bitcoin: Einen neuen für jede Einzahlung. Das ist in der Handhabung etwas anstrengender, vor allem, weil es kein Wechselgeld gibt, das gleich an eine neue Adresse geht, und weil man soweit ich weiß auch keine Accounts verschmelzen kann. Aber es ist möglich. Dabei wird es sogar einfacher, die verschiedenen Adressen auseinanderzuhalten, weil die Wallet nicht die Angewohntheit hat, Münzen ungefragt zu verschmelzen.

Anstatt zu sagen, dass Account-Systeme pauschal weniger privat sind, wäre es wohl korrekter, dass sich die Privatsphäre bei den beiden Systemen verschieden verhält. So haben Account-Systeme auch Vorteile für die Privatsphäre. Beispielsweise erhöhen sie den Aufwand, um die Geschichte eines Accounts aus der Blockchain abzulesen, da im State ja nur ein Guthaben verzeichnet ist, und nicht eine Liste mit Coins, die den Sender referenzieren. Wer schon einmal versucht hat, aus Ethereum ohne die Hilfe eines Blockexplorers die Historie von Accounts rauszukriegen, weiß, was gemeint ist. Dies macht es viel umständlicher, Blacklists zu implementieren und etwa die vergangenen Transaktionen des Nachbarns auszulesen.

Eindeutiger dürfte die zweite Schwäche sein, die Evan Klitzke vorstellt: Es geht dabei darum, dass man bei Accounts verhindern muss, dass sie nicht unter Null fallen. Bei Münzen ist dies einfach, da Münzen vollständig ausgegeben werden, egal in welcher Reihenfolge. Bei Accounts hingegen muss man die Transaktionen in strenger chronologischer Folge ordnen, um Angriffe und Hacks zu unterbinden.

Das Ethereum-Wiki erkärt das etwas genauer: „Eine Schwäche des Account-Paradigmas ist es, dass jede Transaktion eine ‚Nonce‘ braucht, um Replay Angriffe zu verhindern. Die Accounts führen eine Buchhaltung über die verwendeten Nonces und akzeptieren Transaktionen nur, wenn die Nonce 1 über der letzten benutzten Nonce liegt.“ Dies ist nicht nur komplexer, sondern macht auch das Pruning von alten Accounts schwieriger und, wie eine Diskussion auf StackExchange erklärt, verringert die Sicherheit von unbestätigten Transaktionen erheblich. Eventuell sind auch nur einigermaßen sichere unbestätigte Transaktionen mit Account-Systemen gar nicht machbar.

Darüberhinaus scheint ein Account-System Probleme mit einigen Wegen zu haben, um Blockchains zu skalieren. Aber auch hier ist die Situation nicht eindeutig. Da die Transaktionen mit einem Account-System weder mehrere Münzen noch Wechselgeld haben, sind sie in so gut wie allen Fällen deutlich kleiner. So benötigt eine normale Ethereum-Transaktion etwa 109 Byte groß, während die durchschnittliche Größe von Bitcoin-Transaktionen seit Jahren bei mehr als 500 Byte liegt. Anders gesagt: Ethereum kann mit denselben Ressourcen fünf Mal so viele Transaktionen prozessieren wie Bitcoin. Gäbe es diese Smart Contracts und ICOs und so nicht, könnte Ethereum eine ziemlich patente Geld-Blockchain sein.

Insgesamt ist die Frage, ob Account oder Münzen, nicht eindeutig zu beantworten. Beides hat seine Vor- und Nachteile. Ein Münzsystem scheint technisch etwas einfacher und fester zu sein, was vielleicht der Grund war, weshalb Satoshi es benutzt hat, während ein Account-System etwas frickeliger, aber auch moderner wirkt.

Über Christoph Bergmann (2804 Artikel)
Das Bitcoinblog wird von Bitcoin.de gesponsort, ist inhaltlich aber unabhängig und gibt die Meinung des Redakteurs Christoph Bergmann wieder ---

11 Kommentare zu Bitcoin, ganz einfach: Was ist das UTXO – und warum ist es so wichtig?

  1. Ich nehme mal an, dass Bitcoin nicht Account-basiert ist, da ein verwendeter Account für immer im Chainstate erhalten bleiben müsste, oder?

    • Gute Idee. Wobei ich mir vorstellen könnte, dass man einen leeren Account auch irgendwann aus dem State prunen könnte, oder?

      • Anonymous // 7. August 2018 um 15:13 //

        Das könnte zu einem Sicherheitsproblem werden.
        Wenn die Adresse des Accounts ein Hash ist, dann kann es ja zu Kollisionen kommen, wenn jemand mit einem PK ankommt, der zur selben Adresse hashed. Bei Lisk ist es zum Beispiel so, dass der eigene Account erst wirklich sicher ist, wenn man eine Transaktion geschickt hat (kann auch an sich selber sein), um den Public Key bekannt zu geben.
        Es gibt aber sicherlich Verfahren, um das Risiko deutlich zu minimieren, z.B. längere Hashes.

      • Wäre dann die Hashfunktion nicht gebrochen?

      • Anonymous // 7. August 2018 um 16:11 //

        Nicht unbedingt. Lisk nimmt die ersten 8 byte des Hashes (oder so ähnlich) als Adresse. Da kann es schonmal zu einer Kollision kommen. Vorteil soll sein, dass man kurze Adressen hat.

      • Ja, klar, dann natürlich. Wer nimmt denn so etwas verbindlich als Adresse?

      • Mr. Spock // 8. August 2018 um 17:15 //

        „Wenn die Adresse des Accounts ein Hash ist, dann kann es ja zu Kollisionen kommen, wenn jemand mit einem PK ankommt, der zur selben Adresse hashed.“

        Lieber Anonymous,

        die Wahrscheinlichkeit, dass jemand einen PK hat, der zur gleichen Adresse führt, ist verschwindend gering. Anbei eine Beispielrechnung:

        Erster Teil: 1 Mol enthält ca. 6*10^23 Teilchen. Es gibt 2^160 Adressen, was wiederum ca. 4*(6*10^23)^2 Adressen sind, also 4*(1 Mol)^2. Die Frage reduziert sich also auf die Wahrscheinlichkeit, die gleiche Adresse zu erzeugen, selbst wenn es jeweils 2^96 PKs gibt die auf die gleiche Adresse mappen.

        Zweiter Teil: 1 Mol Wasser wiegt ca. 18g und 1 dm^3 Wasser wiegt ca. 1 kg. D.h. ein 1 dm^3 Wasser, also 1 kg, enthält ca. 56 Mol Wasser. Bleiben also 4*(1 Mol)^2/(56 Mol/dm^3) = 4/56 Mol dm^3 an Wasser, was ca. 4.3*10^22 Wasserwürfeln mit Kantenlänge 10 cm entspricht. Weiter umgerechnet sind das dann 4.3*10^10 Wasserwürfel mit Kantenlänge 1 km.

        Letzter Teil: Nehmen wir an, die 4.3*10^10 km^3 Wasser enthalten nur ein einziges schweres Wasser Molekül. Die Menge an Wasser enstpricht nun 43 Würfeln aus Wasser mit einer jeweiligen Kantenlänge von 1000 km! Die Wahrscheinlichkeit einen (speziellen) PK zu finden, welcher auf die gleiche Adresse mappt, ist also gleich der Wahrscheinlichkeit, das einzige schwere Wassermolekül in den den Würfeln zu finden.

        Das Problem, welches Du ansprichst, ist also keins. Man sollte sich eher Sorgen über den (Pseudo)Zufallsgenerator im eigenen Computer machen und Sorge tragen, dass die produzierten Zufallszahlen möglichst zufällig sind.

      • Anonymous // 9. August 2018 um 17:32 //

        Mr. Spock Es kommt auf die Hashfunktion an. Ja, bei Bitcoin ist eine Kollision sehr unwahrscheinlich. Bei Lisk (was ich als Beispiel genannt habe) nicht. Aber ja, durch Verwendung einer Hashfunktion mit längerem Output ist die Gefahr einer Kollision vernachlässigbar.

    • Accounts bei bitcoin-qt sind eine Gruppe von Adressen mit dem gleichen „Label“.

  2. Gut erklärt. UTXO wird von den meisten nicht verstanden

  3. Ein super Beitrag! Dank dafür.

Kommentar verfassen

Entdecke mehr von BitcoinBlog.de - das Blog für Bitcoin und andere virtuelle Währungen

Jetzt abonnieren, um weiterzulesen und auf das gesamte Archiv zuzugreifen.

Weiterlesen