¿Por qué los saldos no están en la cadena de bloques?

Actualmente, uno necesita atravesar la cadena de bloques completa para determinar el saldo de una determinada dirección. ¿No sería mucho más eficiente incluir el nuevo saldo junto con cada transacción? De esa manera, los clientes no necesitarían toda la cadena de bloques para verificar una transacción, ya que los mineros ya verificaron el saldo.

Respuestas (3)

Eso no funcionaría porque, por la forma en que está diseñado el sistema, las cuentas no tienen un montón de monedas para gastar. Las monedas consumibles existen en forma de salidas de transacciones que aún no se han utilizado como entrada de una transacción posterior. Para formar una transacción válida, debe extraer monedas de salidas de transacciones específicas, no de cuentas específicas.

Uno podría imaginar un sistema similar a Bitcoin donde las cuentas tienen saldos. En tal sistema, simplemente podría informar el nuevo saldo de una cuenta en cualquier bloque que modifique el saldo de esa cuenta. Entonces, una transacción podría extraerse de cuentas en lugar de salidas de transacciones específicas. Pero ese sistema no sería Bitcoin.

Esencialmente, Bitcoin no fue diseñado alrededor de cuentas. Las cuentas son solo una forma conveniente para que los seres humanos que usan Bitcoin piensen en el conjunto de salidas de transacciones que se pueden reclamar con la misma clave. (O para formar transacciones que sabemos que solo puede reclamar una persona en particular).

Técnicamente, debe usar una nueva dirección para cada nueva transacción entrante para proteger su anonimato. El cliente estándar también envía el saldo restante después de una transferencia a un nuevo par de llaves. Esto haría que el monto de la transacción fuera sinónimo del saldo.

En cuanto a las direcciones que se usan más de una vez, en primer lugar sería un poco derrochador (tener que agregar un campo adicional para cada transacción) y, además, no necesita reclamar todas las entradas para una dirección determinada cada vez. envías monedas. A veces, no desea reclamar cada entrada, por ejemplo, con transacciones de confirmación baja. Supongamos que tiene una transacción que tiene 10 confirmaciones y otra que tiene 1: si desea asegurarse de que su transferencia se realice incluso si se sobrescriben algunos bloques, solo usaría la entrada de 10 confirmaciones y dejaría que la confirmación 1 madurara. Tales operaciones harían que los saldos se estropearan muy rápidamente.

Creo que tendría que agregar más de un campo por transacción. Cada entrada y cada salida cambiaría el saldo de una dirección, por lo que cada entrada y cada salida tendría que indicar el nuevo saldo de la dirección que toca.
@ChrisMoore Un precio muy bajo a pagar a cambio de asegurar que haya acuerdo sobre cuáles son esos saldos.

Cuando recibe un pago, presumiblemente podría encontrar en la transacción de qué bloque proviene una entrada y luego solicitar una copia de ese bloque para verificar el saldo. Pero sin tener todos los bloques desde ese bloque hasta el último, no sabría si las entradas ya se gastaron en otra transacción.

Los esquemas propuestos que parecen ser viables mantienen una lista del saldo de todas las direcciones en una cadena de bloques separada.