¿Cómo puedo asegurarme de que bitcoind no use salidas no gastadas para una dirección determinada?

Con llamadas RPC a bitcoind, desde scripts separados (python), estoy:

  • llamar a getnewaddress para configurar un nuevo par de claves para una dirección 'especial', asignada a una cuenta distinta (llamemos a esta 'cuenta especial')

  • construyendo transacciones sin procesar (fuera de bitcoind) que gastan salidas a esta dirección especial y luego llamando a bitcoind para firmar enviar

Además de lo anterior, es posible que también se llame directamente a bitcoind, para realizar pagos, o lo que sea.

¿Cómo puedo estar absolutamente seguro de que bitcoind no consume salidas a mi dirección especial fuera de la firma de salidas a esta dirección en signrawtransaction?

Podemos suponer que no hay llamadas que gasten explícitamente de 'cuenta especial', pero el problema es que, tal como lo entiendo, es posible que bitcoind tome prestadas salidas no gastadas arbitrarias con el fin de pagar tarifas de transacción. (Consulte este número , por ejemplo, y también este ).

¿Hay alguna manera de bloquear la dirección especial y evitar que se use para pagar tarifas de transacción para otras cuentas, o de otra manera poder usar bitcoind para firmar transacciones sin procesar que usan salidas a esta dirección sin hacer la clave pública para el dirección más generalmente disponible dentro de bitcoind?

Respuestas (1)

Puede usar lockunspent para bloquear (solo en memoria) entradas no gastadas creadas por transacciones cuya al menos una salida apuntaba a su "dirección especial".

Parece que puede haber un par de condiciones de carrera aquí, una entre la creación no gastada y el bloqueo, y otra entre el desbloqueo y la firma. Y luego, si este bloqueo no es persistente a través de la detención e inicio del servidor, entonces eso también es un problema.
Siempre puede almacenar cualquier "dirección especial" en su base de datos y luego volver a cargarla en su bitcoindcliente al iniciar y bloquearla antes de que suceda algo más. Una vez bloqueados, no se pueden gastar.