PHP: Bitcoind establece una tarifa de transacción incorrecta

Estoy usando la API de Bitcoin EasyBitcoin-PHP

Y también tengo mi tarifa de transacción personalizada, que me gustaría pagar por cada Kb. El problema es que cuando usé bitcoind v.0.10.2 estaba bien y vi mi tarifa personalizada (0.0002) en cada transacción. Pero cuando actualicé a v. 0.13.0, simplemente no funcionará como debería. Aquí está el código simple, que estoy probando ahora

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

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

Y como puede ver en esta transacción, la tarifa es de 0,000045 BTC, no de 0,0002 BTC.

Sé que hubo un error en la versión anterior de bitcoind según el redondeo de tarifas, pero en la nueva versión este error debería corregirse.

¿Quizás hay otro problema aquí?

Respuestas (1)

El valor que especifique para la tarifa personalizada es una tarifa por kilobyte. Hasta hace poco, el "tamaño" para los cálculos de tarifas siempre se redondeaba a 1 kilobyte de todos modos, lo que lleva a algunas personas a creer que la cantidad que están configurando es la cantidad absoluta.

Su transacción es de 225 bytes y paga una tarifa de 0.000045 BTC. Eso es exactamente 0,0002 BTC por 1000 bytes, por lo que funciona según lo previsto.

si lo se. Aquí hay incluso un problema de github para eso. github.com/bitcoin/bitcoin/issues/7633 y, como puedo ver, decidieron revertir la función y ahora el comportamiento debería ser el mismo que en las versiones anteriores. ¿Tengo razón?
Solo se revierten en 0.11, porque el cambio se realizó sin anunciarlo allí. Lo que describo en mi respuesta es el comportamiento previsto y el que se implementa en 0.12 y 0.13.
Oh ya veo. Así que en las nuevas versiones ahora está funcionando mentira esto... Hm... no es bueno. Porque necesito estimar el tamaño de mi transacción futura ahora para mostrarles a mis usuarios qué tarifa quitaría de su pago... y en este momento no sé cómo estimarlo...
Use create/fundrawtransaction para crear su transacción, verifique la tarifa, muéstrela y, si está de acuerdo, use signrawtransaction/sendrawtransaction para transmitirla.
gran complicación del proceso de pago simple (antes) para usuarios y desarrolladores :( ¡pero gracias por la ayuda!
Entiendo que complica las cosas, pero realmente no hay forma de evitarlo. La tarifa por byte es lo que le importa a la red.