Matriz de transacciones individuales de blockchain.info

Como un pequeño proyecto de aprendizaje/pasatiempo, estoy escribiendo un pequeño programa en C++ para extraer una lista de transacciones de blockchain.info y mostrarla visualmente.

Esperaba poder iterar a través de bloques, tomar cada TX y luego extraer una lista de transacciones en una matriz. es decir, Bloque/ID de transacción/dirección_de_envío/cantidad/dirección_de_recepción, etc.

Me conecté a blockchain.info y puedo iterar a través de cada bloque usando jsoncpp. Pero si miro un ejemplo como este:

https://blockchain.info/block-height/100001?format=json

...y específicamente transacciones como esta: https://blockchain.info/rawtx/8131ffb0a2c945ecaf9b9063e59558784f9c3a74741ce6ae2a18d0571dac15bb

¿La suma de las entradas siempre coincidirá con la suma de las salidas? ¿Cómo casaría qué entrada envió qué cantidad a cada salida cuando hay más de 1 en cada una?

Muchas gracias.

Por favor, no elimine las preguntas una vez que hayan sido respondidas, ya que causa confusión a futuros lectores con el mismo tipo de problemas.

Respuestas (1)

agradable, pero lo prometo, no será un "pequeño" proyecto :-)

¿La suma de las entradas siempre coincidirá con la suma de las salidas?

¡No! Hay una regla general, que cualquiera que sea la diferencia, serán las tarifas de los mineros. Para ser más precisos, el minero es libre de tomarlo como honorarios. Entonces, esta es una razón por la que siempre debe tener direcciones de "retorno" en sus transacciones.

¿Cómo casaría qué entrada envió qué cantidad a cada salida cuando hay más de 1 en cada una?

La idea de las transacciones de bitcoin es que no están vinculadas directamente a direcciones, sino a transacciones anteriores. Y no son "divisibles", sino más "adicionales". Trato de explicar: los fondos se transfieren de una transacción anterior a una nueva ubicación. Su software de billetera puede manejar fácilmente varias direcciones. Si envía desde su billetera a un nuevo destino, es posible que la billetera tenga que tomar 2, 3 o 4 tx anteriores, para enviar a la nueva dirección, lo que hace que los fondos en el tx único sean insuficientes para el monto total. En este sentido, usted (su código C++) solo puede "hacer coincidir" las entradas con las salidas (con las direcciones derivadas). Muchas transacciones grandes tienen cientos de entradas y/o salidas; imagine grifos o intercambios: crean 1 transacción, con muchos pagos a diferentes propietarios/usuarios (p. ej.https://blockchain.info/de/tx/2062a2717ca2f77c6935ff685d33086aa5db2f554ecd4d5232432cf9cb6a4006 ).

Tomando su ejemplo: uno puede ver que se requirieron 5 entradas, para gastar 250BTC en 15xif4SjXiFi3NDEsmMZCfTdE9jvvVQrjU y 1mio Satoshis en 1NkKLMgbSjXrT7oHagnGmYFhXAWXjJsKCj. Eso es casi todo lo que puede decir, lo que sucedió en este tx. La analogía de Andreas (y su libro "Mastering Bitcoin", legible en línea, altamente recomendado) es el dinero FIAT. Puede que tengas billetes de 10, 20 y 50 euros en tu cartera, pero no sabes de quién. Ahora quieres pagar 35 euros. Así que das 50 y recibes tal vez 3 veces 5 euros como cambio. Todavía no sabes de quién vinieron, pero solo la cantidad. Estos "tres veces 5 euros" podrían usarse como 3 entradas para una nueva transacción de 15 euros.

(1) No es una transacción adicional, sino un resultado adicional de la misma transacción. (2) Sí. (3) Sí, cuando una salida se incluye como entrada de otra transacción, esa salida se marca como gastada y cualquier otra transacción que la incluya como entrada se considerará inválida. Entonces, esas salidas se muestran como "gastadas" porque ha habido otra transacción que las muestra como una entrada. En el ejemplo que vinculó, la salida 0 de esta transacción se gastó como entrada 4 de la transacción 2b62b3c433bda7a845466e4ec100cad9347f8c039bcc6d78d56f52d8ecb7671e.