Estoy tratando de hacer un sitio web de bitcoin y traté de implementar una especie de botón de 'retirar' que le permitiría enviar su dinero en la dirección de la billetera a otra dirección. El problema al que me enfrento es que, después de la transacción, el saldo de la dirección es negativo.
Esta es la configuración:
""
(cadena vacía) con alguna dirección."user_1"
, "user_2"
, etc. Genero direcciones básicamente haciendo bitcoin-cli getaccountaddress user_1
.""
cuenta.Para las transferencias estoy usando el siguiente comando bitcoin-cli sendfrom user_1 <some_other_bitcoin_address> <amount> <min_confirmations> <comment> <comment_to>
. Si realmente elijo más dinero del que está disponible en la billetera, aparecerá un error y me dirá que no tengo suficiente saldo. Pero en cierto caso extremo, pasa y hace que el saldo de la dirección sea negativo.
Me imagino que hay dos enfoques para esta solución:
Opción 1 : Calcule la tarifa de transacción precisa y, en función de esa tarifa, haga un cheque.
Opción 2 : Usar
bitcoin-cli move "" "user_1" <amount_that_is_negative>
para que parezca que el saldo no es realmente negativo y que el propietario del sitio ha decidido pagar la tarifa en exceso.
Básicamente, necesito resolver el problema del saldo negativo de la dirección y también podría aclarar lo siguiente:
bitcoin-cli settxfee <amount>
parece ser verdadero, pero la tarifa de transacción real que se me aplicó fue mucho más alta. ¿Por qué fue este el caso?sendfrom
sacar dinero de otras cuentas distintas a la ""
cuenta?¡Gracias!
¿Cómo hacer #1? es decir, ¿cómo calcular el tamaño de la transacción (en bytes) + tarifa de transacción por adelantado?
Puede utilizar el fundrawtransaction
RPC introducido recientemente:
createrawtransaction
.fundrawtransaction
(que calculará la tarifa y agregará entradas y cambio).signrawtransaction
) y transmítala (usando sendrawtransaction
).El uso de bitcoin-cli settxfee parece volverse verdadero, pero la tarifa de transacción real que se me aplicó fue mucho más alta. ¿Por qué fue este el caso?
settxfee
establece la tarifa por 1000 bytes, no el total. Si su transacción termina siendo mayor a 1000 bytes, la tarifa será más alta.
Necesito saber más detalles sobre cómo funciona el comando de movimiento. ¿La mudanza es una transacción real que incurrirá en tarifas de transacción?
Infórmese sobre cómo funciona el sistema de cuentas . No hay ninguna transacción involucrada, ya que los saldos de las cuentas son simplemente contadores de frijoles locales. Todas las monedas en su billetera se comparten en todas las cuentas. Los saldos de las cuentas solo hacen un seguimiento de cuántos de ellos pertenecen a quién (pero no qué monedas específicas pertenecen a quién). Move simplemente actualiza los saldos sin ninguna transacción en la red.
¿Es la opción 2 una buena opción para ocultar/resolver mi problema? ¿Cuáles son otras opciones/implementación correcta para implementar un botón de retiro?
No, porque el sistema de cuentas está obsoleto y se eliminará en una versión futura. La razón de esto es que es muy difícil de entender (¡como muestra esta pregunta!) y hace que las copias de seguridad sean casi imposibles (ya que la información de la cuenta para enviar desde no se puede recuperar de la cadena de bloques, restaurar una copia de seguridad de la billetera estropeará su contabilidad).
En su lugar, utilice el mecanismo de transacción de extracción de fondos descrito anteriormente e implemente los saldos de los usuarios en una capa de nivel superior (que, por ejemplo, almacena la información de la cuenta en una base de datos con las copias de seguridad adecuadas).
¿Sendfrom puede retirar dinero de otras cuentas que no sean la cuenta ""?
Por definición, no. Crea una transacción utilizando todas las monedas en la billetera completa para financiarla y luego resta la cantidad enviada más la tarifa de la cuenta especificada.
Caballero oscuro