¿Cómo encontrar de manera eficiente si la dirección en la transacción es válida y tiene la cantidad de datos requerida?

Una transacción tiene una dirección en bitcoin. La transacción le dice que transfiera esa dirección (en fracción o en su totalidad) a otra dirección. Dado que la fuente de la verdad es la cadena de bloques, ¿cómo sabe el minero que la dirección en bitcoin tiene dicha cantidad de datos? ¿Y cómo lo verifica el minero de manera eficiente?

He leído sobre los árboles de Merkel. Tengo entendido que ayudan a encontrar si una transacción está presente en un orden específico en un bloque. Pero una cadena de bloques tendrá muchos bloques. Entonces, ¿cómo lo hacen los mineros de manera eficiente?

¿No será más fácil crear un hashmap desde la dirección de bitcoin hasta la cantidad?

Respuestas (1)

No existen cosas como "direcciones de entrada" o "direcciones de origen", y esto no tiene nada que ver con los árboles Merkle, o incluso con los bloques.

Bitcoin funciona mediante transacciones que crean salidas y otras transacciones que gastan de salidas de transacciones anteriores. Cada salida tiene un valor asociado. Cuando gasta Bitcoin, está gastando de salidas de transacciones anteriores. Su transacción incluirá una referencia a la salida que está gastando: el txid y el índice de la salida. Dado que todas las transacciones (excepto las transacciones de base de monedas, la transacción de generación de monedas, no la empresa) gastan de una salida de transacción anterior, todas las transacciones están encadenadas. Puede retroceder a través de esta cadena de transacciones para verificar que los valores de todas las transacciones sean correctos.

Entonces, cuando un nodo recibe su transacción, busca las salidas de las que está gastando su transacción y se asegura de que ninguna otra transacción haya gastado esas salidas ya. Luego suma los valores de los productos que se gastan y se asegura de que esa suma sea mayor o igual que la suma de los valores de los productos que se crean.

Gracias por su respuesta. ¿Puede explicar cómo se hace esto de manera eficiente and makes sure that no other transaction has spent those outputs already. :?
¿Y cómo encuentra el valor de bitcoin en las salidas de transacciones anteriores (creo que esto es lo que se llama direcciones de entrada)? ¿Está codificado en la propia dirección? (yo dudo..)
El valor está en la propia salida de la transacción.
Para asegurarse de que ninguna otra transacción haya gastado las salidas gastadas por una transacción, el nodo mantiene una lista de todas las salidas de transacciones no gastadas. Actualiza esta lista a medida que recibe nuevas transacciones, agrega salidas que se crearon y elimina las que se gastaron. Puede ver de manera eficiente si una salida ya se gastó al verificar si está en la lista. Si es así, la salida no se ha gastado. Si no es así, entonces se ha gastado o la transacción no existe.
Supongo que será un conjunto hash ... solo para ser precisos, ya que esta pregunta se trata de encontrar la información de manera eficiente.
En Bitcoin Core, se denomina conjunto UTXO y se almacena como una base de datos LevelDB (que internamente son varias listas ordenadas superpuestas) y se almacena en caché agresivamente en RAM en una tabla hash.