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:
Schätzen Sie die Netzwerkgebühr mit estimatesmartfee
"ECONOMICAL" basierend auf einer typischen Transaktionsgröße
Passen Sie den Auszahlungsbetrag basierend auf der Gebührenschätzung an
createrawtransaction
unter Verwendung des geschätzten Auszahlungsbetrags
signrawtransaction
Lesen size
der decodierten Rohtransaktion aus Schritt 2
Berechnen Sie die Netzwerkgebühr mit estimatesmartfee
"ECONOMICAL" basierend auf einer tatsächlichen Transaktionsgröße aus dem letzten Schritt neu
Passen Sie den Auszahlungsbetrag basierend auf der tatsächlichen Netzwerkgebühr an
createrawtransaction
unter Verwendung des tatsächlichen Auszahlungsbetrags
signrawtransaction
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?
Wenn die Eingaben für die Transaktion der Bitcoin Core-Brieftasche bekannt sind, können Sie den fundrawtransaction
Befehl verwenden, um die Gebührenschätzung und Eingabeauswahl zu überspringen. Der Prozess wird dann:
createrawtransaction
mit nur den gewünschten Ausgaben (dh keine Änderung, nur die Empfänger).fundrawtransaction
signrawtransaction
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:
estimatesmartfee
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.
Andreas Chow
todmo