Arquitectura técnica

El cambio en las transacciones

Cuando pagas con bitcoin gastas salidas enteras, así que casi siempre sobra algo. Ese sobrante vuelve a tu billetera en una salida nueva: el cambio. Entenderlo evita sustos con el saldo y el error más caro de quien construye transacciones a mano.
En vídeo: El cambio en Bitcoin: por qué parte de lo que gastas vuelve a ti1:59 · Bitcoinpedia
Ver en YouTube

Al reproducirlo se carga el reproductor de YouTube.

En este artículo

Por qué hay cambio

Bitcoin no lleva cuentas con saldos. Lleva salidas no gastadas, los UTXO, y cada una se gasta entera o no se gasta. Es como pagar un café de 2 euros con un billete de 5: no puedes cortar el billete, así que lo entregas entero y te devuelven 3.

En una transacción la vuelta te la das tú mismo. La billetera añade una salida más, a una dirección tuya, con lo que sobra. Esa salida es el cambio.

Un ejemplo con números

Tienes una salida de 100.000 sats y quieres pagar 60.000. La comisión para el minero será de 500 sats. La transacción queda así:

  • Entrada: 100.000 sats, gastada entera.
  • Salida 1, pago: 60.000 sats para el destinatario.
  • Salida 2, cambio: 39.500 sats de vuelta a tu billetera.
  • Comisión: 500 sats. No es una salida: es la diferencia entre lo que entra (100.000) y lo que sale (99.500).

Por eso, justo después de pagar, puede que tu billetera muestre parte del saldo como pendiente. El cambio es una salida nueva y, como el pago, espera a que la transacción se confirme.

A qué dirección va

Las billeteras modernas mandan el cambio a una dirección nueva, no a la que ya usaste. Las que siguen BIP-44 y sus variantes (BIP-84, BIP-86) tienen dos cadenas de direcciones por cuenta: la externa, para cobrar, y la interna, para el cambio. En la ruta de derivación es el penúltimo número: 0 para cobrar y 1 para el cambio, como en m/84'/0'/0'/1/0.

Todo eso sale de la misma seed phrase, así que el cambio se recupera junto con lo demás, siempre que restaures en una billetera que use la misma ruta de derivación.

Cuando no hay cambio

A veces no sobra nada: las entradas cubren justo el pago y la comisión. Y a veces sobra tan poco que la salida sería polvo. Con la política por defecto de Bitcoin Core, una salida SegWit (P2WPKH) de menos de 294 sats es polvo, y los nodos con esa política no retransmiten la transacción que la crea. En Taproot el umbral es de 330 sats; en unidades de bitcoin tienes los tres umbrales. En ese caso la billetera no añade cambio y esos pocos sats se suman a la comisión.

El error de olvidar el cambio

Si alguien construye una transacción a mano y no pone la salida de cambio, la transacción sigue siendo válida. Todo lo que sobra se lo queda el minero como comisión, y una vez confirmada no hay forma de recuperarlo. En el ejemplo de arriba, la comisión pasaría de 500 a 40.000 sats. Las billeteras hacen la cuenta solas; el riesgo está en herramientas avanzadas o en scripts propios.

Cambio y privacidad

Todas las transacciones son públicas, y quien analiza la cadena intenta adivinar cuál de las salidas es el cambio. Hay pistas que lo delatan: un pago redondo (60.000) junto a una salida irregular (39.500), o una salida del mismo tipo de dirección que las entradas. Adivinar el cambio permite seguir tus fondos de una transacción a la siguiente. Por eso se desaconseja reutilizar direcciones, y por eso existen técnicas como el coin control.

Errores habituales

  • Pensar que la salida de cambio es un pago a otra persona: vuelve a una dirección tuya, de la serie que la billetera reserva para el cambio.
  • Creer que la comisión aparece escrita en la transacción: es la diferencia entre entradas y salidas.
  • Construir una transacción a mano sin salida de cambio: todo lo que sobra se va en comisión, sin vuelta atrás.
  • Alarmarse al ver parte del saldo pendiente tras pagar: es el cambio, esperando la confirmación como el propio pago.

Conceptos relacionados

Fuentes primarias

  1. BIP-44: Multi-Account Hierarchy for Deterministic Wallets (nivel «change»: 0 externa, 1 interna)
  2. Bitcoin Core, src/policy/policy.cpp (GetDustThreshold) y policy.h (DUST_RELAY_TX_FEE = 3.000 sat/kvB)