Flujo de trabajo de direcciones de Bitcoin sobre gastos sobrantes

Necesito comprender el flujo de trabajo correcto de la dirección de Bitcoin para las transacciones. Creé una dirección hace un tiempo con una billetera común y envié algunas monedas allí. La dirección es en segwit m/49'/0'/0'/0/0. Luego gasté algo de dinero en eso. Cuando busqué la dirección en la cadena de bloques, noté que el saldo era 0. La transacción que ocurrió tenía dos direcciones de salida. Los fondos fueron enviados a dos direcciones. La segunda es la dirección no segwit de la persona a quien envié los fondos. El primero fue segwit m/49'/0'/0'/1/0 (dirección de mi billetera). Parece que la billetera movió mis fondos a una nueva dirección en mi billetera. Es decir, m/49'/0'/0'/0/0 -> m/49'/0'/0'/1/0.

¿Debe una billetera mover siempre el sobrante de m/49'/0'/0'/0/ x a m/49'/0'/0'/ x /0? ¿Es esta lógica una práctica estándar? ¿O es específico de la billetera que usé? ¿Hay alguna práctica recomendada? Necesito saber porque estoy desarrollando una billetera y necesito seguir la práctica estándar.

¿Qué debe pasar cuando transfiero los fondos de m/49'/0'/0'/ x /0 a otra dirección y sobran? ¿A dónde debe trasladarse la nueva dirección para las sobras? m/49'/0'/ x '/0/0?

Respuestas (1)

Parece que la billetera movió mis fondos a una nueva dirección en mi billetera.

Ese es un comportamiento normal y deseable. Consulte ¿Cómo funciona el cambio en una transacción de bitcoin?

¿Debe una billetera mover siempre el sobrante de m/49'/0'/0'/0/x a m/49'/0'/0'/x/0?

Esta billetera usa BIP 49 , que amplía la organización jerárquica de billetera descrita en BIP 44 . Los estándares generales para carteras deterministas jerárquicas se describen en BIP 32 . Querrá leerlos detenidamente si está implementando su propia billetera.

Según BIP 44, el cuarto nivel de la ruta de derivación debe ser 0 para pares de llaves "externas" (aquellas que se presentan al usuario como una dirección de recepción que puede enviar a un pagador), y 1 para pares de llaves "internas" (que se usarán como cambio de dirección).

La constante 0 se usa para la cadena externa y la constante 1 para la cadena interna (también conocida como dirección de cambio). La cadena externa se usa para direcciones que deben ser visibles fuera de la billetera (por ejemplo, para recibir pagos). La cadena interna se usa para direcciones que no deben ser visibles fuera de la billetera y se usa para el cambio de transacción de devolución.

BIP 32 especifica algo similar:

Cada cuenta está compuesta por dos cadenas de pares de llaves: una interna y otra externa. El llavero externo se usa para generar nuevas direcciones públicas, mientras que el llavero interno se usa para todas las demás operaciones (cambiar direcciones, generar direcciones, ..., cualquier cosa que no necesite ser comunicada). Los clientes que no admiten llaveros separados para estos deben usar el externo para todo.

Por lo tanto, de acuerdo con este estándar, se usó una dirección de llavero externa .../0/x para recibir sus monedas inicialmente, mientras que la dirección de llavero interna .../1/y se usó para el cambio de su transacción saliente. (Es solo una coincidencia que x e y fueran 0 en este caso; normalmente sería el siguiente valor no utilizado en cada cadena, pero como no había hecho nada más con la billetera, obtuvo el primer par de llaves en cada cadena .)

Gracias. Leeré esto y comprobaré si responde completamente a mis preguntas.
Parece que la especificación cubre muchos de los casos, pero no necesariamente todos los casos. Parece que hay algunos casos en los que la especificación no dicta las mejores prácticas. Y, aparte de eso, una aplicación de billetera puede hacer lo que realmente quiera. Podría realizar transacciones de fondos a donde quiera. Esto parece un problema general, pero es difícil decir si esto causará problemas en el futuro o no. Solo puedo tratar de seguir las especificaciones lo mejor que puedo.
Creo que esto es mayormente correcto, pero la billetera implementa BIP0044 y BIP0049, por lo que BIP0032 no parece ser suficiente para responder la pregunta completa en este momento.
Ah, sí, esa es una mejor referencia en este caso. Gracias.
, si modificas tu respuesta, la marcaré como la respuesta.
Particularmente este punto: github.com/bitcoin/bips/blob/master/…
@MelbourneDeveloper: Vea lo que piensa ahora.
Impresionante. Buen trabajo. Creo que se resolvió mi problema y puedo seguir adelante con la funcionalidad.