Author

Topic: Manipulación de las transacciones de bitcoin. (Read 200 times)

legendary
Activity: 3346
Merit: 3130
August 03, 2019, 10:53:01 AM
#6
...(para esto necesitarías algun script o una secuencia de ordenes que los filtre)...

Edit: Pensándolo bien, creo que es mejor realizar el filtrado de los dust inputs con Python, ya que es mucho más fácil procesar el formato JSON de la salida de bitcoin-cli.

Acomodar los inputs no es algo complejo, si no me equivoco el mismo comando 'listunspent' nos da la opción de ordenarlos por tamaño. Pero como mencionas, algún otro lenguaje de programación nos ayuda a crear la transacción de una forma automatizada.

Dejo aquí un script de python creado para tratar con los dust inputs: https://github.com/petertodd/dust-b-gone
legendary
Activity: 3906
Merit: 6249
Decentralization Maximalist
Gracias, este método todavía no lo conocía y es interesante para fácilmente armar transacciones semi-automatizadas. He manipulado transacciones a través de scripts pero con un método mucho más complicado (y con código BTC pre-segwit).

Otro tema interesante con respecto a los inputs son las conocidas como 'Dust transactions' y esto se refiere a inputs muy pequeños, cosa de satoshis, y hay muchas veces que es importante ignorar estos inputs ya que aveces es mas caro incluirlos en las transacciones que ignorarlos.
Si uno tiene muchos "dust inputs", lo mejor es aprovechar días en los que la cadena no está llena y "consolidarlos" mandándolos todo a una dirección. Es justo un buen ejemplo para usar tu método: Seleccionas todos los inputs menores a cierto número (para esto necesitarías algun script o una secuencia de ordenes que los filtre) y luego armás la transacción mandándolos todos a una sola dirección con una comisión de 1 sat/byte. De manera alternativa, para no gastar la comisión, se pueden usar siempre cuando la transacción no sea urgente.

Edit: Pensándolo bien, creo que es mejor realizar el filtrado de los dust inputs con Python, ya que es mucho más fácil procesar el formato JSON de la salida de bitcoin-cli.
legendary
Activity: 3346
Merit: 3130
Otro tema interesante con respecto a los inputs son las conocidas como 'Dust transactions' y esto se refiere a inputs muy pequeños, cosa de satoshis, y hay muchas veces que es importante ignorar estos inputs ya que aveces es mas caro incluirlos en las transacciones que ignorarlos.

Por lo que entiendo blockchain wallet ya no nos permite gastar inputs pequeños por la misma razón, pero empresas grandes como casinos o exchanges se ven orillados a idear formas de recuperar btc a través de cientos de dust inputs.
legendary
Activity: 2338
Merit: 10802
There are lies, damned lies and statistics. MTwain
Lo explicado por @seoincorporation es de esas cosas que son comprensibles para el ducho en la materia, pero mirado bajo el punto de vista del gran consumo (o gran uso en este caso), resulta de difícil asimilación.

Si intentamos explicar lo citado en el OP a un neófito en BTC, pero conocedor de los costes de las TXs bancarias convencionales, verá que el esquema de costes es netamente distinto, e incluso potencialmente ventajoso a favor de BTC en términos de fees. No obstante, asimilar que el envió de un importe determinado va a variar en base a unos parámetros (tamaño de la TX, que a su vez de correlaciona con el número de inputs, fee , etc.) que no tienen que ver con el importe BTC enviado no es trivial. Explicarles que pueden intentar consolidar inputs cuando es coste minero de las TXs BTC esté bajo, a fin de ahorrar ante un eventual envío posterior a un tercero suena demasiado técnico y complejo.

Este factor, el de la comprensión y asimilación de la confección de los costes de una TX, junto con la posibilidad de esperar días (o peor) según el TX fee que propongamos en la TX, complica la extensión del uso del BTC más de lo que podríamos pensar. Hay más factores relacionados claro está (la no reversibilidad, la posibilidad de errar en la TX sin colchón, etc.), cuyo cúmulo hace que BTC sea más complicado de lo deseable para una gran masa de gente.


Como para explicar que:
<...>
El tamaño aproximado de la TX (puede variar dependiente de diversos elementos técnicos) sería: (180 bytes * Nº Inputs) + (34 bytes * Nº Outputs) + 10 bytes
En la fórmula se observa el peso que tienen el número de inputs en el tamaño. También dependerá de si tu dirección es SegWit (más económico) o Non-Segwit.
<...>
member
Activity: 588
Merit: 61
legendary
Activity: 3346
Merit: 3130
La mayoría de las transacciones se efectúan de la manera simple, abrimos nuestra cartera, escogemos la dirección destino, escogemos la cantidad a enviar y la cartera se encarga de escoger el fee adecuado para la transacción.

Sin embargo hay mucha gente que no entiende como se efectúa una transacción así que voy a dividir el proceso para ustedes.

Bitcoin core es la cartera que nos permite efectuar una transacción de la forma mas pura, y esto se hace en 3 pasos:

1.- Creamos la transacción
Code:
a=$(./bitcoin-cli createrawtransaction '[{"txid":"d42065fea1331ecc8e05d4f2d07d12b3b56d61a749e1db8cf56ab7b3ab0aedbc","vout":1}]' '{"1QzkZdiuodaAXoB1XJc3YmihQe7v6bAfxJ":0.17960000}')

2.- Firmamos la transacción
Code:
b=$(./bitcoin-cli signrawtransaction $a)

3.- Enviamos la transacción
Code:
./bitcoin-cli sendrawtransaction $(echo $b | cut -d " " -f4 | sed 's/,//g' | sed 's/"//g')

En el paso 1 tenemos que escoger los inputs y outputs, para los inputs colocamos el TxId y el vout (Es como cuando tomamos nuestra cartera real y escogemos con que billetes vamos a pagar), y para el output escogemos la cantidad destino. Pero esta parte tiene truco por que si se dan cuenta no especificamos los fees y esto es debido a que el cambio se utiliza de fees, Asi que si nosotros escogemos un input que contiene 0.18 btc y enviamos 0.1796, entonces 0.0004 btc serán gastados como fees.

Y algunos se estarán preguntando:

1.- ¿Como obtengo la lista de inputs?
Para esto usamos el comando 'listunspent'

2.-¿Que pasa si mi input es 1 btc y solo quiero gastar 0.1?
En este caso especificas 2 outputs, el primero es con la dirección a la que quieres hacer el pago con la cantidad de 0.1 y el segundo es una dirección que este bajo tu control con la cantidad de el cambio menos el fee.

3.-¿Por que es esto importante?
Porque una mala manipulación de inputs se resume en elevados costos de fees, ya que lo que hace que las transacciones sean pesadas son los inputs y no los outputs. Así que varios inputs se resume en una transacción pesada con elevados fee.
Jump to: