Die Erhöhung der Transaktionsgebühr mit dem Bitcoin Core-Client schlägt fehl, da keine Änderungsausgabe erfolgt. Warum?

Kontext

Ich habe eine Transaktion (unter Verwendung des vollen Saldos einer Ausgabe) mit dem Bitcoin Core Wallet (das als vollständiger Knoten ausgeführt wird) erstellt. Die Transaktion gelangte wie erwartet in den Mempool der Hauptknoten. Ich habe die Gebühr auf das festgelegt, was der Kunde für eine langsame Transaktion empfohlen hat (etwas mehr als 9 Sat/B), aber heutzutage erweist sich dies als sehr niedrig. Angesichts des aktuellen Standes des Mempools bei Hoenicke könnte dies, wenn überhaupt, erst in Wochen bestätigt werden.

Gebührenerhöhung schlägt fehl

Ich habe die Transaktion zunächst bewusst auf "Request Replace-By-Fee" eingestellt und möchte die Gebühr jetzt erhöhen . Ich habe erwartet, einen Teil des "Zielbetrags" zu nehmen und als Gebühr zu verwenden, wobei der Gesamtbetrag der Transaktion gleich bleibt (immer noch die gesamte Ausgabe insgesamt ausgeben).

Dies scheint jedoch konstruktionsbedingt nicht möglich zu sein. Ich erhalte einen "Fee Bump Error" mit der Meldung "Erhöhen der Transaktionsgebühr fehlgeschlagen (Transaktion hat keine Änderungsausgabe)".

Was tun?

Warum kann ich den Ziel-/Gebührensaldo einer Transaktion nicht ändern und wie soll ich die Gebühr an dieser Stelle erhöhen?

Transaktionsdetails (gemäß Anfrage)

Summary
Size    1xx (bytes)
Weight  7xx
Lock Time   Block: 49xxxx

Inputs and Outputs
Total Input 0.01xxxxxx BTC
Total Output    0.01xxxxxx BTC
Fees    0.00001xxx BTC
Fee per byte    9.xxx sat/B
Fee per weight unit 2.xxx sat/WU
Estimated BTC Transacted    0.019xxxxx BTC

Sowohl Eingangs- als auch Ausgangsadressen beginnen mit „1“

Können Sie den Beitrag bearbeiten, um die Transaktionsdetails und -struktur aufzunehmen?

Antworten (1)

BIP125 RBF -Transaktionen (Replace-by-Fee) in Bitcoin-Core 0.15.0.1 scheinen eine Änderungsadresse mit einem Saldo zu erfordern, um eine zukünftige RBF-basierte Gebührenerhöhung zu ermöglichen.

Betrachten Sie als Beispiel die folgende Transaktion:

Input  - 1.00000 BTC
Output - 0.99998 BTC
Fee    - 0.00001 BTC
Change - 0.00001 BTC

Gehe davon aus, dass die Gebühr zu niedrig ist. Jetzt wollen wir die Gebühr für die Transaktion erhöhen, also ersetzt der RBF die vorherige Transaktion durch eine wie:

Input  - 1.00000 BTC
Output - 0.99998 BTC
Fee    - 0.00002 BTC
Change - 0.00000 BTC

Nun reicht die Gebühr aus, dass die Transaktion bestätigt wird.

Ohne „Wechselgeld“ in der ersten Transaktion gibt es keine Quelle für die erhöhte Gebühr. RBF könnte so implementiert werden, dass die Ausgabe reduziert wird, um eine höhere Gebühr zu ermöglichen; Ich bin mir nicht sicher, warum das nicht unterstützt wird. Zeile 2928 des wallet.cpp-Quellcodes im Bitcoin-Core-Github-Repository besagt:

break; // Done, able to increase fee from change

Der Weg, um dieses Problem für eine Transaktion zu umgehen, bei der RBF aktiviert ist, aber keine Änderungsadresse hat, besteht darin, den Anweisungen zu folgen, die in einer der Antworten auf die kanonische Frage "Transaktion wird nicht bestätigt" enthalten sind . Ich habe letzte Woche genau das Problem erlebt und konnte es mithilfe der -zapwallettxesOption in der Bitcoin-Core-Wallet-CLI erfolgreich wiederherstellen.

Danke für den Link. Ich werde wie dort im Abschnitt „Wie man eine vollständige RBF-Transaktion durchführt“ vorgehen. Seltsam, dass die Verwendung eines Teils des Ausgabewerts nicht unterstützt wird.
"Abandon Transaction" ist für mich ausgegraut, also werde ich wahrscheinlich den lokalen Mempool "von Hand" löschen, was ähnlich wie -zapwallettxes sein sollte
Interessant ist die nächste if-Klausel in Zeile 2932 ( github.com/bitcoin/bitcoin/blob/… ). Dort würden sie anscheinend den Ausgang für Gebührenerhöhung reduzieren. Wie würde das Programm diese Linie erreichen? Ich habe eine ziemlich harte Zeit, nur von einem Blick auf den Quellcode zu erraten. Ich werde mir das von Ihnen bereitgestellte BIP-Dokument ansehen.
Hm, das wird interessant. Ich habe laut BIP125 RBF festgestellt, dass der Bitcoin Core Client versucht, ein "RBF First Seen Safe" zu machen, aber in meinem Fall die Änderung anstelle einer zusätzlichen Eingabe verwendet, aber es gibt keine Änderung. Schade. Sie scheinen nur vergessen zu haben, die Variante ohne Änderung für meinen Fall bereitzustellen, was dann ein "Voll-RBF" ohne die Sicherheit für den Empfänger wäre. Ich denke, das beantwortet den "Warum" -Teil meiner Frage.
Die Option zum Abbruch der Transaktion war bei mir auch ausgegraut. Ich bin mir nicht sicher warum. Es ist interessant , sich den Code anzusehen , an diesem Punkt habe ich nicht genug Erfahrung mit Bitcoin-Core-Code, um wirklich im Detail zu verstehen, was erwartet wird und was passiert.