Weniger umständlicher Weg, um die Netzwerkgebühr in der Rohtransaktion zu erhalten

Mein Code funktioniert jetzt korrekt, um eine Transaktion mit der richtigen Netzwerkgebühr zu erstellen und zu senden. Hier ist mein Pseudocode mit dem json rpc:

  1. Schätzen Sie die Netzwerkgebühr mit estimatesmartfee"ECONOMICAL" basierend auf einer typischen Transaktionsgröße

  2. Passen Sie den Auszahlungsbetrag basierend auf der Gebührenschätzung an

  3. createrawtransactionunter Verwendung des geschätzten Auszahlungsbetrags

  4. signrawtransaction

  5. Lesen sizeder decodierten Rohtransaktion aus Schritt 2

  6. Berechnen Sie die Netzwerkgebühr mit estimatesmartfee"ECONOMICAL" basierend auf einer tatsächlichen Transaktionsgröße aus dem letzten Schritt neu

  7. Passen Sie den Auszahlungsbetrag basierend auf der tatsächlichen Netzwerkgebühr an

  8. createrawtransactionunter Verwendung des tatsächlichen Auszahlungsbetrags

  9. signrawtransaction

  10. sendrawtransaction

Die Schritte 6-9 wiederholen die Schritte 1-4.

Gibt es eine Möglichkeit, dies zu tun, ohne alles zweimal anrufen zu müssen?

Verwenden Sie Eingaben, die der Bitcoin Core Wallet zur Verfügung stehen?
@AndrewChow, bevor der Pseudocode beginnt, kenne ich bereits die txid und die vout für meine Eingabe. Diese tx wird nicht aus meiner Brieftasche stammen; es wird ein tx sein, der von jemand anderem erstellt wurde.

Antworten (1)

Wenn die Eingaben für die Transaktion der Bitcoin Core-Brieftasche bekannt sind, können Sie den fundrawtransactionBefehl verwenden, um die Gebührenschätzung und Eingabeauswahl zu überspringen. Der Prozess wird dann:

  1. createrawtransactionmit nur den gewünschten Ausgaben (dh keine Änderung, nur die Empfänger).
  2. fundrawtransaction
  3. signrawtransaction
  4. sendrawtransaction

Wenn Sie die Brieftasche von Bitcoin Core nicht verwenden, können Sie effektive Werte verwenden.

Vermutlich kennen Sie die Beträge in den Eingaben, bevor Sie die Transaktion tatsächlich erstellen. Sie können dann berechnen, wie groß die Eingaben sein werden, berechnen, wie viel an Gebühren basierend auf der Ausgabe von berechnet werden estimatesmartfee, und diesen Gebührenbetrag vom tatsächlichen Wert der Eingabe abziehen. Dies ist Ihr effektiver Wert.

Wenn Sie die Ausgaben erstellen, berechnen Sie die Gesamtgröße der Nicht-Eingabedaten und berechnen die Gebühren für diese Daten. Jetzt wissen Sie, wie viel Gesamtwert Ihre Eingaben abdecken müssen. Auf diese Weise können Sie dann Münzen auswählen.

Der Ablauf ist also:

  1. estimatesmartfee
  2. Berechnen Sie für jede potenzielle Eingabe die Gebühr für diese Eingabe und berechnen Sie den effektiven Wert.
  3. Berechnen Sie für jede Ausgabe (einschließlich Änderung, wenn Sie davon ausgehen, dass es eine Änderung geben wird) und für den zusätzlichen Transaktionsaufwand mit fester Größe die Nicht-Eingabe-Gebühren.
  4. Addieren Sie die Gebühren ohne Eingabe zu dem Betrag, den Sie senden möchten. Dies ist der Betrag, den Ihre Eingaben benötigen, um die Gesamtkosten zu decken.
  5. Wählen Sie die Eingaben, die Sie ausgeben möchten, basierend auf ihren effektiven Werten.
  6. createrawtransaction, signrawtransaction, sendrawtransaction.

Die Größe der Eingaben in vbytes ist wie folgt:

P2PKH: 148 Vbyte

P2WPKH: 37 Vbyte

P2SH-P2WPKH: 60 Vbyte

Bei P2SH- und P2WSH-Eingaben hängt dies vom verwendeten Skript ab. Die meisten Leute werden jedoch P2PKH, P2WPKH oder P2SH-P2WPKH verwenden.