Coin Selection es la forma en que una cartera elige los fondos para construir una transacción de Bitcoin. El saldo no es una cantidad continua: está formado por salidas independientes de transacciones anteriores que aún no se han gastado, llamadas UTXO. La cartera debe seleccionar suficientes para cubrir el pago y la comisión. Normalmente lo hace de forma automática; elegirlas manualmente se llama Coin Control. La red comprueba la validez de la transacción resultante, pero no impone el mismo método de selección a todas las carteras.
Anna quiere pagar 60000 sat. Su cartera prepara el pago: es una aplicación o un dispositivo que permite recibir y enviar bitcoin. La abreviatura sat significa satoshi, la unidad mínima en la que se registran los importes de las transacciones de Bitcoin. Tiene un UTXO de 100000 sat. Como ocurre con un billete, no puede descontar solamente una parte: una entrada de la nueva transacción gasta esa salida completa. La transacción crea una salida de 60000 sat para el comerciante y, con una comisión de 1000 sat, otra de 39000 sat para Anna. Esta segunda salida es el cambio, o change. No es un reembolso posterior del comerciante; se crea dentro de su propia transacción. La comisión es la diferencia entre la suma de las entradas y la de todas las salidas. [1] [7]
La cartera puede financiar el mismo pago con distintos UTXO. Sin embargo, más entradas suelen significar más datos y, por tanto, una comisión mayor con la misma tarifa. La comisión no es un porcentaje del importe enviado. Depende del tamaño virtual de la transacción, medido en vB, o bytes virtuales, que tienen en cuenta el distinto peso de sus componentes. Supongamos un UTXO de 10000 sat cuya entrada añade unos 68 vB. A 10 sat/vB, esa entrada cuesta 680 sat y aporta 9320 sat al resto del pago. Ese es su valor efectivo. Las demás partes de la transacción también tienen un coste; el tamaño real de la entrada depende de las condiciones de gasto escritas en el script y de los datos de firma. Un script es un programa breve que describe las condiciones de gasto. En un pago habitual, la cartera usa una clave privada, un valor numérico secreto, para crear una firma digital: una autorización de gasto verificable. [2] [3] [7]
Anna puede haber recibido muchos importes pequeños. Reunirlos en una salida propia de mayor valor se llama consolidación. Quizá necesite menos entradas después, pero consolidar cuesta una comisión hoy y vincula públicamente las salidas utilizadas. Por eso no conviene agruparlo todo automáticamente. Bitcoin Core también compara costes mediante la waste metric: una puntuación que considera la diferencia entre el coste de las entradas ahora y con una tarifa supuesta a largo plazo, más el coste de crear y gastar después el cambio, o el excedente entregado como comisión. La tarifa a largo plazo es una hipótesis de trabajo, no una predicción. La puntuación mide costes, no privacidad. [2] [6]
Anna ha etiquetado un ingreso como sueldo y otro como regalo. Gastarlos juntos da a quien observa la blockchain una pista de que están relacionados. No demuestra que todas las entradas pertenezcan a una sola persona: también existen transacciones construidas entre varios participantes. Coin Control permite elegir UTXO concretos, y las etiquetas ayudan a recordar su origen. Una etiqueta es una nota de la cartera, no un mensaje escrito en la blockchain. BIP 329 describe cómo transferir estas notas y la información sobre si la cartera considera que una salida concreta se puede gastar. Es una configuración local de la cartera que no cambia las reglas de la red Bitcoin. El formato no selecciona los fondos. Exportar etiquetas puede revelar relaciones sensibles, y ni siquiera un pago sin cambio garantiza el anonimato. [4] [6]
No todo el saldo mostrado tiene por qué estar disponible de inmediato. La cartera puede haber excluido algunas salidas; otras esperan confirmación o que se cumplan sus condiciones de gasto. La selección también debe respetar los límites de tamaño y peso de la transacción. Al gastar un ingreso sin confirmar, el nuevo pago depende de la transacción anterior que lo creó, denominada ancestro en este contexto. Confirmar toda la cadena puede requerir una comisión adicional. RPC, la interfaz con la que los programas controlan Bitcoin Core 29.0, ofrece include_unsafe en walletcreatefundedpsbt. Esta opción permite incluir entradas sin confirmar de mayor riesgo. Si la transacción original se sustituye de modo que desaparezca la salida necesaria, el pago dependiente no podrá confirmarse. Su retirada temporal de la memoria de un nodo, por sí sola, no cambia su validez. [3] [5]
¿Cómo explora la cartera las opciones? Branch-and-bound, o BnB, prueba combinaciones de entradas y descarta las ramas de búsqueda que no pueden dar un resultado adecuado. Busca financiar el pago sin una salida de cambio separada. No exige una coincidencia exacta: el intervalo permitido incluye un excedente de hasta el coste de crear y gastar más tarde el cambio. Ese excedente se convierte en comisión; no queda escondido en la cartera. Por tanto, un pago sin cambio no es necesariamente el más barato posible. La búsqueda tiene un número limitado de intentos y puede no encontrar una solución existente ni la mejor combinación de todas. [2]
Bitcoin Core 29.0 compara candidatos obtenidos con BnB, Knapsack y Single Random Draw (SRD), distintos métodos para encontrar un conjunto adecuado de entradas. Añade CoinGrinder cuando la tarifa efectiva supera el triple de la tarifa a largo plazo; este método busca una selección de poco peso que genere cambio. Compara los candidatos con la waste metric explicada antes. Si el usuario decide descontar la comisión de los importes destinados a los receptores, omite BnB. Esto describe una versión concreta, no un procedimiento obligatorio para todas las carteras ni una afirmación sobre la versión más reciente. [3]
Para un pago corriente no necesitas conocer parámetros de programación. Antes de firmar, sí debes entender quién recibe el dinero, el importe, la comisión total y tu propio cambio. Para usuarios avanzados, walletcreatefundedpsbt de Bitcoin Core 29.0 permite indicar entradas mediante txid, el identificador de la transacción original, y vout, el índice de su salida. add_inputs controla si la cartera puede añadir otras entradas. Atención a las unidades: fee_rate usa sat/vB, mientras que feeRate usa BTC/kvB, es decir, bitcoin por 1000 bytes virtuales. El resultado es un PSBT, un formato para compartir una transacción preparada y obtener sus firmas. Crear un PSBT no envía nada por sí solo ni confirma el pago. Ni la selección manual ni este formato garantizan que el destinatario sea correcto o que las entradas sin confirmar sean válidas. [5]
Para obtener la imagen más completa, lee esta entrada junto con UTXO, Coin Control, Change Address, Fee Rate, PSBT, Privacidad en Bitcoin. También enlazan con esta entrada Watch-only Wallet, Change Address, Inventing Bitcoin.