No parece práctico escanear cada transacción en una cadena de bloques para determinar el saldo de una cuenta. A medida que crece la cadena de bloques, esto parece aún más difícil y requiere más recursos. Quizás todas las transacciones estén agrupadas en lo que solíamos llamar un registro, específicamente un registro de longitud variable. dirección..trans1, trans2, etc...transN para la última transacción.
Bitcoin utiliza el llamado modelo UTXO (salida de transacciones no gastadas).
La primera vez no es muy intuitivo porque es diferente del modelo de contabilidad tradicional en el que simplemente gastas y envías a una cuenta.
Piensa en huchas llenas que no se pueden llenar más de lo que son y que tienes que abrir antes de poder gastar el contenido:
Cada hucha/UTXO está vinculada a una dirección. Por supuesto, un usuario de Bitcoin puede tener varios UTXO relacionados con su dirección. La suma de los UTXO da la cantidad de bitcoins que posee la dirección (que es una de las funciones de las billeteras).
Cada entrada de transacción es la salida de una transacción anterior. Aunque el software de billetera da la sensación de que "transfiere" bitcoins o satoshis, no gasta de una cuenta , gasta UTXO .
Usted gasta de transacciones realizadas previamente a usted.
Una forma algo más intuitiva de pensar en los cálculos de saldo es pensar que usted usa una billetera fiduciaria real.
Si desea ver cuánto dinero tiene físicamente en este momento , abriría su billetera, sacaría todos los billetes de diferentes denominaciones y los sumaría. Esto le da su saldo.
Bitcoin hace algo similar, donde una dirección es similar a su billetera física. Una misma dirección puede tener varios utxos vinculados. El saldo de esa dirección es la suma de todos los utxos.
La clave aquí es que bitcoin solo rastrea las salidas de transacciones no gastadas . Por lo tanto, para llegar al saldo de la dirección, solo necesita iterar a través de la cadena de bloques, agregar nuevas salidas cuando se crean y eliminar las antiguas cuando se gastan. Además, este es un proceso extensible. Si conoce el conjunto utxo a partir del bloque 100, no necesita volver a calcular desde el bloque 0 para actualizar con los datos del bloque 101. Simplemente puede actualizar su conjunto desde el bloque 100.
Esto nuevamente es similar a cómo usamos billeteras físicas. Nadie realiza un seguimiento de todos los billetes y monedas que ha tenido en el pasado (salidas de transacciones gastadas). Solo llevan la cuenta de lo que tienen actualmente (utxo). Cuando ocurre una nueva transacción (digamos que compra leche), solo actualiza el estado actual de su billetera eliminando una nota y devolviendo el cambio. No necesitas calcularlo desde la primera vez que usaste dinero.
Bitcoin lleva esto un paso más allá y tiene un concepto de cuentas, que son múltiples direcciones que actúan como una billetera. Una analogía similar sería si todos en su casa reunieran el dinero de todas sus billeteras, para que puedan gastarlo como uno solo. De nuevo, el saldo de una cuenta es simplemente la suma del saldo de las direcciones que contiene.
Editar:
El saldo de una dirección se calcula sumando todos los valores de las salidas de transacciones no gastadas (UTXO) que el par de claves correspondiente a esa dirección puede gastar.
Para responder a la pregunta más amplia: "¿por qué escanea cada transacción en toda la cadena de bloques para determinar su saldo?"
El núcleo de Bitcoin no necesita saber el saldo de una dirección para realizar la validación. Sin embargo, debe poder escanear todas las salidas de transacciones anteriores para validar las nuevas. Para hacer esto, escanea una base de datos indexada generada (por txid) de todas las transacciones para las salidas anteriores a las que hace referencia una nueva transacción y verifica que la firma satisface la salida anterior (UTXO). Tenga en cuenta que esto solo requiere escanear salidas no gastadas, no todas las transacciones.
La optimización de este almacenamiento de datos para el cálculo del saldo mediante la indexación por dirección y txid podría facilitar el cálculo del saldo, pero no es necesario para la validación y sería a expensas de la eficiencia de la verificación de transacciones. Es mejor dejar esto a una aplicación de billetera por el bien de la red.
Respuesta anterior:
La respuesta anterior explica cómo indexar transacciones en el núcleo de bitcoin, lo que puede ayudar a una billetera o a un explorador de bloques a determinar el saldo de una dirección de manera más eficiente.
Puede indexar las transacciones en la cadena de bloques para que sea más fácil buscarlas. Bitcoin-core permite esto usando la -txindex=1
bandera.
De la Wiki de Bitcoin :
txindex
| Mantener un índice de transacción completo, utilizado por la llamada rpc getrawtransaction (predeterminado: 0)
Jard de Cayo