¿Cómo funciona el cambio en una transacción de bitcoin?

Parece que cuando envía una transacción de bitcoin, todas las monedas en la dirección de envío se gastan en esa transacción, se dividen en la cantidad que pretendía enviar y "cambian", que regresan a usted, pero en otro (recién creado ) dirección de recepción.

Eso hace que sea un poco difícil rastrear su saldo en el explorador de bloques (especialmente porque la nueva dirección de recepción no parece mostrarse en el cliente de Bitcoin en ninguna parte).

¿Tiene que funcionar así o es un detalle de implementación específico del software cliente?

Además, ¿tienes que esperar a que se confirme el cambio antes de poder gastarlo de nuevo?

Tengo este mismo problema. La pregunta que tengo, ¿la especificación ( github.com/bitcoin/bips/blob/master/bip-0032.mediawiki ) dicta lo que se supone que debe suceder? ¿O depende de la billetera hacer la mejor suposición sobre qué hacer? Y en segundo lugar, si las billeteras pueden hacer lo que quieran, ¿cómo puede una aplicación atravesar todas las direcciones que podría usar otra billetera para transferir fondos? Parece casi imposible porque parece que una billetera podría hacer lo que quiera. Podría ocultar sus fondos en algún lugar oscuro si no sigue ninguna convención.

Respuestas (3)

Primero, aclaremos la diferencia entre cuentas y direcciones.

Las "cuentas" se utilizan para la comodidad de las personas para realizar un seguimiento de sus fondos. Esto se utiliza principalmente para rastrear el origen de los fondos. Dado que esto es solo para su seguimiento, puede mover Bitcoins de una cuenta a otra simplemente moviendo un número de una columna a otra. No se necesitan transacciones. (Esto es como cuando sabes que le debes a tu hijo $25 de mesada y tienes $200 presupuestados para comestibles).

Las "direcciones" se utilizan para recibir Bitcoins en las transacciones. Las monedas se envían a una dirección. El cliente asocia cada dirección con una cuenta y agrega los fondos recibidos a esa cuenta. Esto simplemente se hace por conveniencia para permitir que las personas rastreen indirectamente a qué dirección se enviaron los fondos. Pero puede tener cualquier número de direcciones asociadas con la misma cuenta.

El cambio proviene de la forma en que se gastan los Bitcoins. Para gastar una cierta cantidad de Bitcoins, debe extraer Bitcoins de las salidas de transacciones a las cuentas que controla. Tenga en cuenta que en la parte de gastos, no importa qué dirección sea o a qué cuenta esté asociada esa dirección. Cuando gasta Bitcoins de una cuenta en particular, eso solo significa que debita esa cuenta por la cantidad que envía. No significa que los fondos provengan de direcciones asociadas con esa cuenta. Recuerde, la asociación entre direcciones y cuentas es solo para recibir , no para enviar. (Por ejemplo, cuando gasta dinero en comestibles, no es como si tuviera facturas específicas para comestibles. Solo tiene una cantidad presupuestada).

Entonces, cuando obtiene los resultados de la transacción, forma una pila de Bitcoins lo suficientemente grande para el número que está tratando de enviar. Por lo general, no será exacto ya que debe reclamar una salida completa. Entonces el exceso forma el 'cambio'.

Dado que no hay una dirección asociada con el envío de Bitcoins, no hay una dirección en particular a la que deba enviarse el cambio. Entonces, para preservar el anonimato, el cliente crea uno nuevo solo para recibir el cambio de esta transacción. Dado que esta dirección no está realmente asociada con una cuenta y no debe usarse para recibir más Bitcoins (porque eso le diría sin sentido a las personas que el mismo destinatario recibió las monedas que recibió este cambio), el cliente no lo muestra.

Debido a que el cliente administra las monedas de una manera particular, no tiene sentido intentar ver las monedas que administra con ningún tipo de explorador. Está tratando específicamente de ocultar el hecho de que todas las monedas están relacionadas. Ese tipo de servicios están destinados a monitorear los fondos recibidos , no los fondos administrados.

La información en la respuesta de David es correcta, pero es posible que no responda la pregunta real; no está claro si la pregunta es sobre el cambio en general o específicamente sobre el envío del cambio a una nueva dirección.

Si es lo último, no es necesario agregar nada. Sin embargo, si la pregunta fuera sobre la práctica del cambio en general, entonces sí, es necesario.

La razón de esto es que una salida, cuando se usa como entrada, debe gastarse en su totalidad. Digamos que alguien le envía 10 BTC, esos 10 BTC son una sola salida. No puede gastar parte de esa moneda, de la misma manera que no puede cortar una parte de una moneda física y hacer que mantenga su valor.

La razón de esto es que una salida es en realidad una secuencia de comandos, y para gastar una salida, simplemente transmite la solución a esta secuencia de comandos. Esa salida, en su totalidad, se convierte en una entrada, y si no incluyera el cambio, la diferencia entre las entradas y las salidas se destinaría a las tarifas de transacción.

Lo que es específico del cliente es cómo manejar este cambio: el cliente Satoshi lo envía a una nueva dirección, mientras que otros clientes pueden simplemente enviar el cambio a una de las direcciones de salida.

El cambio es una salida como cualquier otra, lo que significa que debe esperar las confirmaciones, pero aún puede usar ese cambio para enviar otra transacción de inmediato, solo tendrá que esperar a que se confirme la primera transacción antes de la segunda. uno puede.

¿Tiene que funcionar así o es un detalle de implementación específico del software cliente?

Sí, esto lo implementa el propio protocolo de Bitcoin , pero es una buena práctica no reutilizar las direcciones. Dado que estamos tratando con una criptomoneda pseudoanónima, tendría sentido aumentar el "anonimato" cuanto más podamos hacer.
Sin embargo, puede obligar a su billetera a enviar "cambio" a una dirección estática y permanente sin generar una nueva dirección de cambio cada vez que realiza una transacción. Esto reducirá sustancialmente su privacidad y el historial de transacciones no se "ofuscará" como se pretende .

Además, ¿tienes que esperar a que se confirme el cambio antes de poder gastarlo de nuevo?

No, también puedes gastar las monedas de cambio con 0 confirmaciones.

Excepto las monedas coinbase (es decir, monedas recién extraídas que necesitan 100 bloques para madurar), puede gastar monedas con 0 confirmaciones de billeteras de línea de comando y muchas otras. Esto está permitido por el propio protocolo, pero es posible que muchos clientes no permitan a los usuarios transmitir txs hasta que las entradas tengan al menos 1 confirmación, o incluso más.

RECUERDE que gastar 0 monedas de confirmación de una fuente no confiable puede resultar en la poda de transacciones del mempool de la red debido a un posible ataque de "pseudo-doble gasto". En el caso de gastar su propio cambio con 0 confirmaciones, confía en usted mismo como el remitente original, por lo que esto no es un problema (a menos que también la transacción original que generó las monedas de "cambio" tuviera 0 confirmaciones de un remitente que no es de confianza).