Una forma menos tortuosa de obtener una tarifa de red en una transacción sin procesar

Tengo mi código funcionando correctamente ahora para crear y enviar una transacción con la tarifa de red correcta. Aquí está mi pseudocódigo usando json rpc:

  1. Calcule la tarifa de la red utilizando estimatesmartfee"ECONÓMICO" en función del tamaño de una transacción típica

  2. Ajustar el monto del pago según la estimación de la tarifa

  3. createrawtransactionusando el monto de pago estimado

  4. signrawtransaction

  5. lectura sizede la transacción sin procesar decodificada del paso 2

  6. Vuelva a calcular la tarifa de la red usando estimatesmartfee"ECONÓMICO" en función del tamaño real de la transacción del último paso

  7. Ajuste el monto del pago en función de la tarifa de red real

  8. createrawtransactionusando el monto de pago real

  9. signrawtransaction

  10. sendrawtransaction

Los pasos 6 a 9 repiten los pasos 1 a 4.

¿Hay alguna manera de hacer esto sin tener que llamar a todo dos veces?

¿Está utilizando entradas que están disponibles para la billetera Bitcoin Core?
@AndrewChow, antes de que comience el pseudocódigo, ya conozco el txid y el vout de mi entrada. Este tx no será uno de mi billetera; será un tx creado por otra persona.

Respuestas (1)

Si la billetera Bitcoin Core conoce las entradas de la transacción, entonces puede usar el fundrawtransactioncomando para omitir la estimación de tarifas y la selección de entrada. El proceso entonces se convierte en:

  1. createrawtransactioncon sólo las salidas que desee (es decir, sin cambios, sólo los destinatarios).
  2. fundrawtransaction
  3. signrawtransaction
  4. sendrawtransaction

Si no está utilizando la billetera de Bitcoin Core, puede usar valores efectivos.

Presumiblemente, conoce las cantidades en las entradas antes de crear la transacción. Entonces puede calcular qué tan grandes serán las entradas, calcular cuánto costarán las tarifas en función de la salida de estimatesmartfeey restar el monto de la tarifa del valor real de la entrada. Este es su valor efectivo.

Cuando crea las salidas, calcula el tamaño total de los datos que no son de entrada y calcula las tarifas para esos datos. Ahora sabe cuánto valor total deben cubrir sus entradas. A continuación, puede seleccionar las monedas de esa manera.

Entonces el proceso es:

  1. estimatesmartfee
  2. Para cada entrada potencial, calcule la tarifa por esa entrada y calcule el valor efectivo.
  3. Para cada salida (incluido el cambio si supone que habrá un cambio) y para los gastos generales de transacción de tamaño fijo adicional, calcule las tarifas no relacionadas con la entrada.
  4. Sume las tarifas de no entrada a la cantidad que desea enviar, esta es la cantidad que necesitarán sus entradas para cubrir el costo total.
  5. Elija los insumos que desea gastar en función de sus valores efectivos.
  6. createrawtransaction, signrawtransaction, sendrawtransaction.

El tamaño de las entradas en vbytes es el siguiente:

P2PKH: 148 vbytes

P2WPKH: 37 vbytes

P2SH-P2WPKH: 60 vbytes

Para las entradas P2SH y P2WSH, depende del script que esté utilizando. Sin embargo, la mayoría de la gente usará P2PKH, P2WPKH o P2SH-P2WPKH.