Diseño de billetera: ¿Qué hacer con las cantidades de polvo en cambio?

Estoy trabajando en algunas peculiaridades de una billetera que estoy desarrollando, y uno de los problemas es qué hacer con las cantidades de cambio que son más grandes que el polvo ~ 600 satoshis, pero menos de una cantidad práctica para enviar nuevamente con una tarifa. ¿Debo devolver la cantidad casi polvo como cambio, o simplemente agregarla como tarifas de minería adicionales?

Por ejemplo, digamos que un usuario gasta una cantidad que luego de pagar una salida y una tarifa suficiente deja solo 1,000 satoshis como cambio. ¿Debo enviar esos 1000 satoshis como cambio aunque 1000 satoshis son demasiado pequeños para gastarlos nuevamente con una tarifa suficiente?

Incluso con tarifas tan bajas como 10 satoshis por byte con una entrada y salida (P2PKH), necesitaría al menos 2000 satoshis para las tarifas.

Estoy pensando que podría ser mejor simplemente poner el sobrante en tarifas mineras adicionales si el monto del cambio está por debajo de cierto umbral, digamos 3,000 satoshis. Una dirección con solo 1,000 satoshis es en su mayoría inútil, y solo se agregaría al creciente conjunto de UTXO que probablemente nunca se gastaría. ¿Parece apropiado este enfoque, o estoy "robando" a los usuarios su polvo?

Respuestas (1)

Investigué un poco sobre un tema relacionado * y diría que depende de sus suposiciones lo que sucederá con el valor de Bitcoin, la tarifa y el costo de crear transacciones a largo plazo.

Bajo el supuesto de que la tasa de la tarifa (en [sat/B]) permanecerá aproximadamente en el mismo nivel o aumentará, el usuario ahorra dinero al agregar el cambio a la tarifa cuando el cambio es menor que el costo de crear un producto y gastar una entrada:

change ≤ (bytesOutput + bytesInput) × feePerByte ⇒ add to fee

Para P2PKH a 150 satoshis por byte, esto es, por ejemplo

change ≤ 27,300 satoshis = (34 bytes + 148 bytes) × 150 satoshis per byte

También puede considerar que agregar el cambio a las tarifas de transacción hace que las transacciones se confirmen más rápidamente, ocupen menos espacio de bloques y reduzcan el conjunto de UTXO.

Sin embargo, cantidades más pequeñas pueden volverse gastables en el futuro, si las tasas de las tarifas se redujeran drásticamente o si el costo de los insumos de gasto se redujera significativamente. Lo primero podría ocurrir debido a aumentos en el tamaño de los bloques o la introducción de un sistema de pago de segunda capa, mientras que lo segundo podría deberse a nuevos formatos de transacción, agregación de firmas o una reducción del minRelayTxFee.

Alternativamente, puede intentar igualar directamente la cantidad que está tratando de gastar o simplemente seleccionar una cantidad lo suficientemente grande para crear un resultado de cambio útil. Gracias, Pedro, por el recordatorio.

* mi tesis de Maestría en Selección de Monedas [PDF con 943KB]

Una alternativa es simplemente hacer una selección de entrada para una cantidad mayor y luego crear un cambio con el resultado.
Correcto, suponiendo que haya entradas adicionales disponibles. También existe la opción de permitir que los usuarios establezcan sus propias tarifas, pero eso parece abrir la posibilidad de errores.