El aumento de la tarifa de transacción con el cliente de Bitcoin Core falla debido a que no hay cambios en la salida. ¿Por qué?

Contexto

Creé una transacción (utilizando el saldo total de una salida) con Bitcoin Core Wallet (ejecutándose como nodo completo). La transacción entró en el mempool de los nodos principales, como se esperaba. Establecí la tarifa a lo que el cliente recomendó para una transacción lenta (poco más de 9 sat/B), pero en estos días resulta muy baja. Dado el estado actual del mempool en honicke , esto puede obtener confirmación en semanas, en todo caso.

El aumento de la tarifa falla

Inicialmente, deliberadamente, configuré la transacción en "Solicitar reemplazo por tarifa", y quiero aumentar la tarifa ahora . Esperaba tomar una parte de la "cantidad objetivo" y usarla como tarifa, dejando igual la cantidad total de la transacción (todavía gastando la producción completa en total)

Sin embargo, esto no parece ser posible por diseño. Recibo un "Error de aumento de tarifa" que dice "Falló el aumento de la tarifa de transacción (la transacción no tiene una salida de cambio)".

¿Qué hacer al respecto?

¿Por qué no puedo cambiar el saldo objetivo/tarifa de una transacción y cómo debo aumentar la tarifa en este momento?

Detalles de la transacción (según solicitud)

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

Tanto las direcciones de entrada como las de salida comienzan con "1"

¿Puede editar la publicación para incluir los detalles y la estructura de la transacción?

Respuestas (1)

Las transacciones BIP125 RBF (Replace-by-fee) en bitcoin-core 0.15.0.1 parecen requerir un cambio de dirección con un saldo para facilitar un futuro aumento de tarifa basado en RBF.

A modo de ejemplo, considere la siguiente transacción:

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

Suponga que la tarifa es demasiado baja. Ahora, queremos aumentar la tarifa de la transacción, por lo que el RBF reemplaza la transacción anterior con una como:

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

Ahora la tarifa es suficiente para que se confirme la transacción.

Sin el "cambio" presente en la primera transacción, no hay fuente para el aumento de la tarifa. RBF podría implementarse de tal manera que la producción se reduzca para permitir una tarifa mayor; No estoy seguro de por qué eso no es compatible. La línea 2928 del código fuente de wallet.cpp en el repositorio bitcoin-core github dice:

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

La forma de evitar este problema para una transacción que tiene RBF habilitado, pero no tiene una dirección de cambio es seguir las instrucciones contenidas en una de las respuestas en la pregunta canónica "la transacción no se confirma" . Experimenté el problema exacto la semana pasada y pude recuperarme con éxito usando la -zapwallettxesopción en la CLI de la billetera bitcoin-core.

Gracias por el enlace. Haré lo que se indica en la sección "Cómo hacer una transacción RBF completa" allí. Es extraño que no se admita el uso de una parte del valor de salida.
"Abandonar transacción" está atenuado para mí, por lo que probablemente purgaré el mempool local "a mano", que debería ser similar a -zapwallettxes
Interesante es la siguiente cláusula if en la línea 2932 ( github.com/bitcoin/bitcoin/blob/… ). Allí parecerían reducir la producción por el aumento de la tarifa. ¿Cómo llegaría el programa a esa línea? Me resulta bastante difícil adivinar solo de un vistazo al código fuente. Buscaré en el documento BIP que proporcionó.
Hm, esto se pone interesante. He encontrado según BIP125 RBF, que el cliente Bitcoin Core intenta hacer un "RBF First Seen Safe", pero usando el cambio en lugar de una entrada adicional en mi caso, pero no hay cambio. Gorrón. Parece que simplemente se olvidaron de proporcionar la variante sin cambio para mi caso, que entonces sería un "RBF completo" sin la seguridad para el destinatario. Supongo que esto responde a la parte del "por qué" de mi pregunta.
La opción de abandonar la transacción también estaba atenuada para mí. No estoy seguro de por qué. Mirar el código es interesante , en este momento no tengo suficiente experiencia con el código de núcleo de bitcoin para comprender realmente en detalle lo que se espera frente a lo que está sucediendo.