Envío de pagos desde una billetera HD

Encontré estas dos preguntas muy útiles para comprender las billeteras HD

1) ¿Cómo funcionan las billeteras deterministas jerárquicas en cuanto a transacciones?

2) algunas preguntas sobre cómo funciona la billetera HD

Sin embargo, todavía no tengo claro cómo funcionaría el envío de pagos en el caso de la billetera HD. Supongamos el siguiente escenario:

  • la clave pública derivada #15 recibió 1 BTC en una transacción
  • la clave pública derivada #20 recibió 2 BTC en una transacción

Ahora que quiero enviar 2.5 BTC a alguna dirección, ¿cuál es el procedimiento para hacerlo? ¿Necesito hacer dos transacciones separadas?

También lo encontré confuso en general en términos de lo que se encarga la billetera (bitcoin-core, etc.) y lo que debe hacer el usuario. Por lo tanto, agradecería si alguien puede explicar lo anterior destacando algunos pasos en bitcoin-core, por ejemplo.

Respuestas (1)

Las billeteras HD no son especiales cuando se trata de transacciones. A las transacciones no les importa si las claves involucradas se derivaron de forma determinista o se generaron aleatoriamente.

Piense en una billetera dividida en dos partes: la primera parte (que llamaremos el controlador de claves) maneja los pares de claves privadas/públicas y crea firmas digitales. La segunda parte (que llamaremos el controlador de transacciones) maneja la recepción y creación de transacciones. Supongamos que la primera parte tiene algunas funciones getnewpubkey(devuelve una nueva dirección) y signdatawithpubkey(recibe una clave pública y algunos datos para firmar, devuelve una firma digital).

Por lo tanto, hay dos tipos diferentes de controladores de claves: los que generan claves aleatoriamente y los que las generan de forma determinista (también conocidas como carteras HD). Estos dos se pueden usar de manera intercambiable con el controlador de transacciones; el controlador de transacciones hace exactamente lo mismo y no le importa cómo se generan las claves. Todo lo que necesita es obtener claves cuando las necesita, y que el controlador de claves firme transacciones cuando el controlador de transacciones se lo solicite.


En su escenario, independientemente de si se usó una billetera HD, el controlador de transacciones conoce dos transacciones de las que puede gastar. Estas dos transacciones se enviaron a las direcciones que corresponden a dos claves que el controlador de transacciones le pidió al controlador de claves que proporcionara (es decir, llamó getnewpubkeydos veces).

Ahora, cuando desea enviar, el controlador de transacciones construye una transacción que tiene sus dos transacciones recibidas como entradas. Una vez que crea la transacción, la envía al controlador de claves para que la firme (de modo que llamará signwithpubkeydos veces y pasará la misma transacción en ambas llamadas, pero una clave pública para la primera llamada y la otra clave pública para la segunda llamada). Luego, toma esas firmas y la transacción sin firmar, las combina y produce una transacción final que luego se transmite a la red.

Observe cómo el controlador de transacciones que realmente recibe y crea la transacción no sabe ni le importa cómo se derivaron las claves. Podría haber utilizado un controlador de claves que genera claves al azar o uno que las genera de manera determinista; no hace ninguna diferencia.


lo que debe hacer el usuario. Por lo tanto, agradecería si alguien puede explicar lo anterior destacando algunos pasos en bitcoin-core, por ejemplo.

El usuario no necesita hacer nada. El usuario hace clic en los botones para obtener una nueva dirección cuando quiere una nueva dirección y hace clic en los botones para enviar Bitcoin cuando quiere enviar. Todo (elegir qué transacciones usar como entradas, crear la transacción, firmar la transacción, etc.) es manejado por el software. Lo que hace el usuario con las transacciones no cambia si las claves se generaron de forma aleatoria o determinista.

muy minucioso. ¡muchas gracias! como pregunta de seguimiento (y espero que sea la última pregunta antes de profundizar más): si obtenemos un montón de correos electrónicos no endurecidos pubkeyy xpublos entregamos a otras personas como una forma de recibir fondos. Cuando necesito gastar de estas direcciones, necesitamos derivar los privkeys correspondientes para ellas y firmar las transacciones, lo que no hicimos en primer lugar, ¿verdad? por "nosotros", supongo que esto se puede hacer con el software de la billetera.
Depende del software de la billetera. Algunos programas también obtendrán las claves privadas y las almacenarán. Algunos programas, y los que admiten el modo de solo visualización con xpubs, almacenarán las rutas de derivación. En este tipo de configuración separada, cuando crea una transacción, el software le dará una transacción sin firmar, a menudo con algunos datos adicionales que en realidad no son parte de la transacción en sí, pero que son utilizados por el software que tiene el firmante xprv. puede firmar la transacción y darle algo para transmitir a la red.
gracias de nuevo. ¿Tiene algunos materiales de lectura detallados o recursos en términos de los pasos para configurar la separated paradigmAPI de software que describió? Entiendo que responde en el software. Estoy principalmente interesado en los de código abierto como bitcoin-core, electrum, armería, etc. Así que cualquier cosa basada en cualquiera de estos sería muy útil. También investigaré un poco y haré otra pregunta sobre SE si no puedo encontrar. :)
por cierto, estoy aprendiendo a configurar algún sistema de pago, y siento que lo que describiste es exactamente lo que necesito. por eso me gustaría aprender en términos de código qué tipo de funciones API puedo utilizar.