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

Hallo? Wie bekomme ich meine Bitcoins bestätigt? Und was mache ich, wenn eine Transaktion festhängt?

Wenn mal wieder Stau auf der Blockchain ist: Wie berechnet man die Gebühren richtig? Und was macht man, wenn eine Transaktion festhängt. Wir versuchen, die wichtigsten Fragen zu erklären, wie man sich hilft, wenn der Mempool voll ist.

Gebühren? Ist Bitcoin nicht umsonst?

Theoretisch ja, praktisch nein. Man kann Transaktionen ohne Gebühren absenden, sofern sie die Mindestgröße für Dust überschreiten. Transaktionen, die inklusive Gebühr eine bestimmte Schwelle unterschreiten (etwas über 5.000 Satoshi oder 0.00005 Bitcoin) werden von den anderen Knoten nicht weitergeleitet und kommen nicht in die Blöcke. Allerdings akzeptieren Miner in der Regel auch keine gebührenlosen Transaktionen. Warum sollten sie auch?

In jedem Block gibt es jedoch einen  kleinen „priority space“, in dem Transaktionen ohne Gebühren zuweilen unterkommen. Dies funktioniert ordentlich, wenn die Blöcke leer sind, allerdings sehr schlecht, wenn sie voll sind. So war es vor ein bis 1,5 Jahren noch problemlos möglich, kostenlose Transaktionen zu senden, während man heute damit rechnen muss, dass sie niemals ankommen.

Mit der neuesten Version des Client, Core 0.12, haben es gebührenlose Transaktionen noch schwieriger. So können Knoten ihren Mempool aufräumen und die Transaktionen mit den niedrigen Gebühren rauswerfen, und Miner können ihren Priority Space reduzieren. Damit wird es nahezu unmöglich, eine Transaktion ohne Gebühren in einem vernünftigen Zeitraum durchzubringen, da sie effektiv aus dem Netzwerk gelöscht werden (was aber, wie wir später sehen, auch Vorteile hat).

Woher weiß ich, wie hoch die korrekten Gebühren sind und wie stelle ich sie ein?

Die Berechnung der Gebühren ist auf den ersten Blick verwirrend und auf den zweiten logisch. Die Höhe der Gebühren hängt in keinster Weise von der Höhe des versendeten Betrags ab, sondern von der „Größe“ der Transaktion in kilobyte. Wir erinnern uns: jede Bitcoin-Transaktion wird permanent in der Blockchain abgespeichert, also auf tausenden von Computern rund um die Welt. Daher bezahlt man für den Platz, den eine Transaktion benötigt. Gemeinerweise kann es vorkommen, dass eine Transaktion über 100.000 Bitcoin nur 0,2 kb groß ist, während eine Transaktion über 0,0450 Bitcoin 16 kilobyte groß sein kann.

Der Bitcoin-Client hat einen etwas ungenauen Automatismus zur Berechnung der Gebühr. Genauer kann man sie einschätzen, wenn man bei bitcoinfees.21.co nachschaut, wieviele Satoshi je Byte man bezahlen muss, um schnell einen Platz in den Blöcken zu finden, dann dies in Bitcoin je Kilobyte umrechnet (z. B.: 50 Satoshi / Byte = 0,0005 Kilobyte) und dies dann im Client einstellt. Die meisten anderen Wallets, etwa Electrum, sollten die Gebühren automatisch angemessen berechnen. Bei manchen, wie blockchain.info, kann man sogar einstellen, ob man eilig oder sparsam versenden will. Wenn eure Wallet das nicht macht, sondern Transaktionen mit viel zu geringen Gebühren versendet, wird es Zeit, ein Update herunterzuladen – oder die Wallet zu wechseln.

Wer von Bitcoin.de aus überweist, hat einen großen Vorteil: Denn der Marktplatz bündelt Transaktionen. Indem jeder Teilnehmer der Transaktion eine kleine eigene Gebühr beisteuert, kommen die Bitcoins selbst in sehr überladenen Zeiten reibungslos in den nächsten Block.

Woher weiß ich, wie „groß“ meine Transaktion ist?

Meistens weiß man das erst, wenn man die Transaktion absendet. Ich habe z. B. neulich eine Transaktion mit Electrum gebildet, für die dann die Wallet – korrekterweise – eine horrende Gebühr von 0,015 Bitcoin verlangt hat (das sind mehr als 5 Euro!). Die habe ich dann doch nicht abgesendet. Wer sich mit Coin Controll im Client eine Transaktion zusammenstellt, kann jedoch darauf achten, dass sie möglichst „klein“ ist. Das wird aber etwas kompliziert.

Zuerst sollte man wissen, woraus eine Transaktion besteht. Die beiden wichtigsten Bestandteile sind input und output. Immer wenn ich Bitcoins auf eine Adresse empfange, bekommt meine Wallet einen input. Empfange ich zweimal Bitcoins mit derselben Adresse, habe ich zwei inputs. Wenn meine Wallet dann eine Transaktion baut, nimmt sie die inputs, die am praktischsten sind, und bildet daraus die entsprechenden outputs.

Stellen wir uns vor, wir bezahlen an einer Kasse 6,50 Euro aus dem Geldbeutel. Wir nehmen dafür etwa zwei Münzen mit jeweils zwei Euro, eine Münze mit ein Euro, zwei Münzen mit fünfzig cent, zwei mit zwanzig und eine mit zehn. Das wären dann 8 inputs. Wenn ich dagegen mit einem 10-Euro-Schein bezahle ist das ein input und ich bekomme 3,50 Euro als Wechselgeld zurück.

Aufgrund von wichtigen kryptographischen Details sind die inputs die mit Abstand „größten“ Bestandteile einer Transaktion. Daher braucht eine Transaktion, die wie in unserem Beispiel sieben inputs nimmt, viel mehr Platz als eine Transaktion, die mit einem input auskommt – und dementsprechend mehr Gebühren. Meine „riesige“ Transaktion in Electrum bestand aus hunderten von winzigen Inputs und hat deswegen zurecht riesige Gebühren benötigt.

Wie kann ich eine Transaktion retten, wenn sie festhängt?

Das wird jetzt vertrackst. Mir ist keine Wallet bekannt, die das kann, weshalb man die Transaktion quasi „freihacken“ muss. Für künftige Versionen ist geplant, dass man sie durch RBF ersetzt, aber dies ist noch nicht betriebsbereit und kann derzeit auch noch bei den Minern auf Unverständnis stoßen. Daher stelle ich hier zwei andere Varianten vor, die nicht immer, aber unter einigen Umständen funktionieren: Child-Pays-for-Parent und ein Double Spend. Beide Methoden können funktionieren, aber es gibt keine Garantie. Einen Versuch dürfte es jedoch wert sein.

Child pays for Parent (CpfP)

Voraussetzung hierfür ist, dass ein Wechselgeld Bestandteil einer Transaktion ist. Wir erinnern uns: Wenn wir als input einen Zehn-Euro-Schein nehmen, um 6,50 Euro zu bezahlen, bekommen wir als output ein Wechselgeld von 3,50 Euro. Dieses Wechselgeld geht als input auf eine unserer Adressen zurück und wird im Client sofort als Guthaben angezeigt (bzw. gar nicht von der Bilanz abgebucht). Im Client kann man einstellen, dass man das Wechselgeld noch vor der Bestätigung ausgeben kann. In einigen anderen Wallets funktioniert das leider nicht, weshalb CpfP nicht funktioniert.

Der Trick ist nun: Wenn eine Transaktion festhängt, weil die Gebühren so gering sind, dass die Miner sie einfach nicht in Blöcke aufnehmen wollen, dann machen wir sie eben attraktiver. Dazu nehmen wir das Wechselgeld und schicken es erneut an uns. Diesmal aber mit einer opulenten Gebühr. Wenn die Miner diese Gebühr einsacken wollen, müssen sie die vorangegangene Transaktion ebenfalls in einen Block mit aufnehmen. Damit wäre das Problem gelöst.

Nicht möglich ist CpfP jedoch, wenn die eigentliche Transaktion kein Wechselgeld beinhaltet. Problematisch ist es auch, wenn die vorangegangene Transaktion aufgrund mangelnder Gebühren gar nicht erst in den Mempool eingegangen ist bzw. aus diesem wieder rausgeworfen wurde. Dann nehmen die anderen Knoten die zweite Transaktion soweit ich weiß gar nicht erst an, weil sie denken, dass gar kein Guthaben da ist.

Double Spend

An sich sollte man niemals einen Double Spend machen. Es gibt aber Situationen, in denen es notwendig sein kann. Etwa wenn man eine Transaktion gemacht hat, die zwar von der eigenen Wallet abgebucht wurde, aber es weder in die Blöcke noch in den Mempool schafft. Wenn eine Transaktion in allen anderen Nodes sitzt, dürfte ein Double Spend nicht wirklich funktionieren bzw. problematisch sein. Wenn aber die Transaktion im eigenen Client angezeigt, jedoch beispielsweise bei blockchain.info nicht erkannt wird, dann weiß man: die anderen Knoten wissen nichts von ihr.

Manche Leute empfehlen in diesem Fall, einfach den Arbeitsspeicher zu leeren und die Blockchain neu aufzusetzen. Das ist möglich, aber viel zu kompliziert. Einfacher ist es, eine online-wallet zu eröffnen, in die man einen privaten Schlüssel importieren kann. Dann muss man nur noch rausfinden, wie man den Private Key aus der eigenen Wallet exportiert. Die meisten guten Wallets – etwa der Client, Electrum und Mycelium – ermöglichen dies, zumindest über die Konsole. Mit welchem Befehl müsst ihr im Einzelfall googeln. Wenn eure Wallet das nicht kann, solltet ihr euch für die Zukunft eine andere suchen.

Den privaten Schlüssel können wir dann beispielsweise bei der Online-Wallet von blockchain.info einspielen. Und voila: ihr könnt den Beitrag wieder ausgeben. Nun könnt ihr nochmal dieselbe Transaktion bilden, diesmal aber mit einer höheren Gebühr.

Replace-by-Fee

Mit der Funktion „Replace-by-Fee“ (RBF) ist es möglich, eine Transaktion zu ändern, solange sie im Mempool steckt. Neuere Versionen der Wallets GreenAddress und Electrum haben einen „bumb fee“ Knopf, mit dem man durch RBF die Gebühr einer Transaktion nachträglich erhöhen kann. Dies dürfte die komfortabelste Weise sein, die Bestätigung einer Transaktion zu beschleunigen.

Die mobile Version verlassen