¿Qué se entiende por polvo de Bitcoin?

He visto el término "polvo" utilizado para describir pequeñas transacciones que la red de Bitcoin podría considerar spam. ¿Existe una definición generalmente aceptada de este término?

Creé esta pregunta mientras escribía una respuesta y no encontraba un buen enlace o definición para el polvo. Publicaré mi primer intento de respuesta, pero me encantaría ver algo más definitivo.
Gracias, entiendo... es como un error de transacción demasiado pequeño. ¿Y la transacción no es final o ya se gastó?

Respuestas (6)

La definición de polvo es específica del cliente y no una regla de red.

Bitcoin Core considera que el resultado de una transacción es polvo, cuando su valor es menor que el costo de gastarlo a la dustRelayFeetasa. El valor predeterminado dustRelayFeees 3000 sat/kvB¹, lo que da como resultado los mismos valores de polvo que la definición de polvo anterior utilizada antes de Bitcoin Core 0.15.0. La definición de polvo anterior vinculaba el límite de polvo con la tasa minRelayTxFee y el costo de gasto de una salida que excedía 1/3 de su valor.

Con el valor predeterminado dustRelayFeede 3000 sat/kvB, dado que el tamaño de una entrada P2PKH es de 148 bytes y el tamaño de una salida P2PKH es de 34 bytes, las salidas P2PKH que valen menos de 546 satoshis son consideradas polvo por Bitcoin Core (siendo 546 satoshi el más pequeño no -valor de polvo). Para las salidas P2WPKH, Bitcoin Core considera que las salidas valen menos de 294 satoshis ² de polvo. Dado que los tamaños de entrada de las salidas scripthash y taproot son desconocidos , Bitcoin Core combina sus tamaños de salida reales con los tamaños de entrada de los tipos de keyhash correspondientes para umbrales de polvo de 540 satoshis para P2SH y 330 satoshis para P2WSH y P2TR.

Se dustRelayFeepuede configurar con la opción de línea de comando oculta -dustrelayfee.

Además, Bitcoin Core 0.15.0 agregó un archivo discard_rate. Coincide discard_ratecon la estimación de tarifa de tarifa objetivo más larga (actualmente la estimación de tarifa de tarifa de 1,000 bloques), pero está limitada a entre al menos dustRelayFeey como máximo 10,000 satoshi/kvB. Cualquier salida de cambio que sería polvo en el discard_rate, es decir, costaría más gastar que su valor en el discard_rate, se eliminará automáticamente en la tarifa en lugar de crearse como una salida de cambio.

Otros usos de "polvo"
Tenga en cuenta que el término "polvo" también se usa coloquialmente para referirse a cualquier UTXO de valor cada vez más bajo y para UTXO que no son rentables para crear o gastar a la tarifa actual . Prefiero usar el término " arena " para los UTXO pequeños pero gastables.


¹ El tamaño de la transacción se midió en bytes antes de segwit. Desde segwit, la medida relevante es el peso de la transacción que se da en bytes virtuales (vbyte, vB) o unidades de peso (wu) donde 4 wu = 1 vB. Para transacciones sin segwit, su tamaño es igual a su tamaño virtual: 1 B = 1 vB. Para transacciones segwit, su tamaño virtual es menor o igual a su tamaño. Puede leer más sobre estas unidades en ¿Hay alguna diferencia entre bytes y bytes virtuales (vbytes)? .
² El lector atento puede esperar que el límite de polvo para las salidas de P2WPKH sea de 297 satoshis, ya que las salidas de P2WPKH son de 31 bytes y las entradas de P2WPKH son de aproximadamente 68 vbytes , pero parece que cuando el límite de polvo para las salidas de P2WPKH fueimplementado , el código contenía un error de redondeo en el tamaño de la entrada que hizo que se supusiera un vbyte más pequeño de lo que realmente es. (Felicitaciones a Crypt-iQ por señalar esto ).

¿Cuál es la fórmula para calcular el polvo?
¿Debería considerar el polvo también para transacciones testnet/regtest?
Si el peso de crear una salida y luego gastar esa entrada es menor que las tarifas requeridas para hacerlo a 3 s/vB, es polvo. Es decir, el umbral de polvo para Bitcoin Core es 3×(input_size+output_size).
sí, pero no sé cómo encontrar input_size. Hice una pregunta aquí: bitcoin.stackexchange.com/questions/113649/… tal vez conozcas la solución. Creo que es otro tema y debe ser respondido en otra pregunta. Quizás podrías ayudarme

No estoy seguro de que haya una definición exacta de polvo. El wiki del cliente Armory dice:

Envío de menos de 0,01 BTC a cualquier destinatario: la red considera que estos pequeños productos son "polvo" y los desalienta al exigir una tarifa. Si no se desalienta, alguien podría tomar 1.0 BTC y crear 1,000,000 transacciones de 0.000001 BTC cada una, gratis, lo que obstruiría la red. Entonces, esa es una definición de polvo.

Otra definición de polvo es el nuevo tamaño de salida mínimo de 5.46uBTC que se agrega a 0.8.2.

Esta atracción define el 'polvo antieconómico' como 5,46 uBTC (546 satoshis, alrededor de $0,007 a los precios actuales), y trata cualquier transacción con salidas inferiores a 546 satoshis como no estándar (no se retransmitirá, no se extraerá). 546 satoshis se derivan del costo (en tarifas) de gastar un TxOut/TxIn.

(Tenga en cuenta que, cuando se lanzó inicialmente, se decía que el umbral de polvo era 5430 satoshis, pero eso era incorrecto y luego se fijó en el número correcto. Las tarifas también se redujeron 10 veces )

Sin embargo, no creo que la definición de polvo cambie fundamentalmente la esencia de la respuesta.

En general, la definición exacta de polvo y el umbral de lo que se considera polvo pueden cambiar con el tiempo con el volumen de transacciones (y, por lo tanto, la competencia por el espacio en la cadena de bloques) y los tipos de cambio.

Considerar 0.01BTC como polvo probablemente esté desactualizado; probablemente se remonta a cuando los bitcoins valían menos de 10 dólares.
Vale la pena señalar que la cantidad mínima cuenta para todas las salidas, incluso el cambio. El cliente satoshi está configurado para incluir solo la pequeña cantidad adicional como una tarifa para los mineros en lugar de crear cambio por una pequeña cantidad.

Para entender 'polvo' debes entender algunas cosas:

En primer lugar, un UTXO es una salida de transacción no gastada. Esto es esencialmente una pieza de bitcoin en algún lugar de la cadena de bloques que no se ha gastado.

Para crear una transacción, se utilizan 1 o más UTXO para formar las entradas, y 1 o más UTXO "nacen" en el proceso. Una vez que se confirman las transacciones, los UTXO que formaron las entradas ahora son solo "TXO" (es decir, se han gastado).

Para garantizar que se confirme una transacción, se debe agregar una tarifa, esa tarifa es proporcional al tamaño total de la transacción, que es la cantidad de bytes que ocupa la transacción en la cadena de bloques. Cuantos más UTXO se utilicen como entradas, mayor será la transacción y, por lo tanto, mayor será la tarifa que se debe pagar.

Si tengo 1 BTC almacenado en 1 UTXO, me costará menos enviar eso que 1 BTC distribuido en 10 UTXO de 0,1 BTC, y me costará menos enviar eso que 100 UTXO de 0,01 BTC.

Las tarifas se calculan como satoshis por byte, y las tarifas fluctúan dependiendo de qué tan ocupada esté la red.

Cada UTXO que desee utilizar en una transacción incurrirá en un aumento de la tarifa.

Cada UTXO ocupa una cantidad de bytes en la transacción.

Si multiplica la tarifa por byte por la cantidad de bytes tomados por la UTXO y excede el valor contenido en la UTXO, entonces se dice que esta UTXO es 'polvo'.

Por lo tanto, un UTXO 'polvo' es un UTXO que no vale la pena incluir en una transacción porque hacerlo incurriría en un aumento de la tarifa superior al valor del UTXO.

Comente la definición de polvo del repositorio real de Bitcoin en Github que se encuentra en el archivo policy.cpp:

// "Dust" is defined in terms of dustRelayFee,
// which has units satoshis-per-kilobyte.
// If you'd pay more in fees than the value of the output
// to spend something, then we consider it dust.
// A typical spendable non-segwit txout is 34 bytes big, and will
// need a CTxIn of at least 148 bytes to spend:
// so dust is a spendable txout less than
// 182*dustRelayFee/1000 (in satoshis).
// 546 satoshis at the default rate of 3000 sat/kB.
// A typical spendable segwit txout is 31 bytes big, and will
// need a CTxIn of at least 67 bytes to spend:
// so dust is a spendable txout less than
// 98*dustRelayFee/1000 (in satoshis).
// 294 satoshis at the default rate of 3000 sat/kB.

Las salidas polvorientas son salidas de tamaño realmente pequeño de una transacción. Las transacciones de Bitcoin son de suma 0, por lo que lo que entra debe salir. Cuando realiza una transacción para enviar algo de dinero desde su dirección a otra dirección, cualquier resto se envía a una dirección de cambio que usted controlará. Ahora bien, si ese resto es realmente pequeño, entonces se vuelve "polvoriento". Luego, si intenta realizar otra transacción con esa salida polvorienta no gastada (UTXO), los mineros rechazarán la transacción y no se confirmará, por lo tanto, el bitcoin no se moverá.

La red de bitcoin, dependiendo de la versión que esté ejecutando un minero, tiene diferentes definiciones de lo que se considera UTXO polvoriento. Si este sitio es la versión correcta de bitcoind que se ejecuta en los nodos, la mayor parte de la red está en 0.10 y 0.9.*. Para 0.9.3 el límite de polvo es 546 satoshis . Para la versión .10, creo que es 546 y las versiones anteriores de 0.9, creo que eran más altas en 10x alrededor de 5k satoshis.

El polvo de Bitcoin se refiere a las miles y miles de pequeñas transacciones con las que algunos sitios inundan la red y, por lo tanto, la cadena de bloques.

Creo que por lo general se refiere más bien a los resultados de las transacciones, no a las transacciones.