PHP - Bitcoind richtet eine falsche Transaktionsgebühr ein

Ich verwende die Bitcoin-API EasyBitcoin-PHP

Und ich habe auch meine benutzerdefinierte Transaktionsgebühr, die ich pro Kb zahlen möchte. Das Problem ist, dass, als ich Bitcoin v.0.10.2 verwendete, das in Ordnung war und ich meine benutzerdefinierte Gebühr (0,0002) bei jeder Transaktion sah. Aber wenn ich auf v. 0.13.0 aktualisiert habe, funktioniert es einfach nicht so, wie es sollte. Hier ist der einfache Code, den ich gerade teste

$bitcoin = new Bitcoin($user, $password, $host, $port);

$result = $bitcoin->settxfee(0.0002); //returns true
$newTxId = $bitcoin->sendtoaddress('144YsrgtDmRSPC8wUBXLxByCcQAEbV1EUB', 0.001); //returns c3a2fceed1c25624aee8e957c644813bf38808260aad607e623c68e182371ac9

Und wie Sie in dieser Transaktion sehen können, beträgt die Gebühr 0,000045 BTC, nicht 0,0002 BTC.

Ich weiß, dass es in der vorherigen Version von Bitcoin laut Gebührenrundung einen Fehler gab, aber in der neuen Version sollte dieser Fehler behoben sein.

Vielleicht liegt hier ein anderes Problem vor?

Antworten (1)

Der Wert, den Sie für die benutzerdefinierte Gebühr angeben, wird in Gebühren pro Kilobyte angegeben. Bis vor kurzem wurde die „Größe“ bei Gebührenberechnungen sowieso immer auf 1 Kilobyte aufgerundet, was manche Leute glauben ließ, dass der Betrag, den sie festlegen, stattdessen der absolute Betrag ist.

Ihre Transaktion umfasst 225 Bytes und zahlt 0,000045 BTC-Gebühren. Das sind genau 0,0002 BTC pro 1000 Bytes, es funktioniert also wie vorgesehen.

ja ich weiß. Hier ist sogar ein Github-Problem dafür. github.com/bitcoin/bitcoin/issues/7633 und wie ich sehen kann, haben sie sich entschieden, die Funktion zurückzusetzen, und jetzt sollte das Verhalten das gleiche sein wie in alten Versionen. Habe ich recht?
Sie werden nur in 0.11 zurückgesetzt, weil die Änderung dort ohne Ankündigung vorgenommen wurde. Was ich in meiner Antwort beschreibe, ist das beabsichtigte Verhalten und das, das in 0.12 und 0.13 implementiert ist.
ach, ich verstehe. Also in neuen Versionen funktioniert es jetzt liegen diese ... Hm .. nicht gut. Weil ich jetzt meine zukünftige Transaktionsgröße schätzen muss, um meinen Benutzern zu zeigen, welche Gebühr ich von ihrer Auszahlung abziehen würde ... und im Moment weiß ich nicht, wie ich sie schätzen soll ...
Verwenden Sie create/fundrawtransaction, um Ihre Transaktion zu erstellen, überprüfen Sie die Gebühr, zeigen Sie sie an und verwenden Sie, falls vereinbart, signrawtransaction/sendrawtransaction, um sie zu übertragen.
große Komplikation des einfachen (vorher) Auszahlungsprozesses für Benutzer und für Entwickler :( aber danke für die Hilfe!
Ich verstehe, dass es die Dinge kompliziert, aber es führt wirklich kein Weg daran vorbei. Für das Netzwerk zählt die Gebühr pro Byte.