¿Cómo verifica el receptor de una transacción toda la cadena de propiedad?

Mientras leía el artículo de Satoshi Nakamoto sobre cómo funciona Bitcoin, me quedé atascado en el número 2. En una cadena de transacciones, ¿cómo puede alguien que ha recibido la moneda comprobar toda la cadena con solo un hash firmado de la anterior?

Cualquiera

  • La persona que envía la moneda tendría que incluir toda la cadena de propiedad, que comenzaría a aumentar cada vez más en tamaño.
  • Tendría que haber un mapeo público de hash a transacción en alguna parte.
  • Tendría que haber una lista de monedas válidas en algún lugar, lo que hace que solo sea necesario verificar la transacción más reciente

No veo a Satoshi Nakamoto hablando de ninguno de estos.

Respuestas (3)

Tendría que haber un mapeo público de hash a transacción en alguna parte.

Sí. Hay una base de datos de utxo - salidas de transacciones no gastadas. Para ser correcto, es un índice del archivo blockchain.

En la implementación de Bitcoin Core desde 0.8, el conjunto UTXO ya no se implementa como un índice en los archivos de la cadena de bloques. En cambio, contiene una copia completa e independiente de todas las salidas no gastadas. Esto es por eficiencia y para permitir que futuras versiones eliminen los datos de la cadena de bloques.

Para un usuario que ejecuta un nodo completo, esto es básicamente lo que sucede. En la instalación inicial, descargan (de otros pares en la red) una copia de la cadena de bloques completa, que contiene todas las transacciones ejecutadas. Entonces, cuando llega una nueva transacción, tienen los datos para rastrear todas las transacciones que condujeron a ella.

Para hacer esto más eficiente, el cliente mantiene una base de datos de salidas de transacciones no gastadas válidas (utxo), indexadas por hash de transacción (o txid). Cuando llega una nueva transacción T, el cliente comprueba que todas las entradas de T corresponden a distintos utxo's en la base de datos. Si lo hacen, y todas las firmas están en orden, y todo lo demás sobre la transacción tiene sentido, entonces se acepta la transacción. Los utxos correspondientes a las entradas de T se eliminan de la base de datos (ya que ahora están gastados), y se crean nuevas entradas de utxos correspondientes a las salidas de T.

Para los nodos "delgados", que no guardan todos estos datos, tienen que solicitarlos a otros nodos de la red que sí lo hacen. Esto complica un poco las cosas y requiere cierta confianza en los nodos que proporcionan la información.

La persona que envía la moneda tendría que incluir toda la cadena de propiedad, que comenzaría a aumentar cada vez más en tamaño.

Esto por sí solo no sería suficiente, porque no le dice si la cadena de propiedad se gastó dos veces, o si esas transacciones se confirmaron en bloques válidos, o incluso si las monedas originales se extrajeron correctamente y existen en la cadena más larga. Para saber todo eso, necesita ver toda la cadena de bloques o confiar en otra persona que haya visto toda la cadena de bloques.

El documento explica que la base de la cadena de bloques es que todos estén al tanto de cada transacción que haya ocurrido y el orden en que ocurrieron. Entonces, al tener acceso a la cadena de bloques, puede validar un nuevo pago para asegurarse de que sea genuino y no se haya gastado dos veces.

Los nodos de Bitcoin están optimizados para que solo puedan validar una cadena una vez y luego almacenar un conjunto de sus transacciones no gastadas, lo que significa que no tienen que volver a verificar cada transacción hasta el bloque de génesis. Sin embargo, esto es solo una optimización, por lo que probablemente sea por eso que se dejó fuera del documento.

También puede usar una billetera SPV (consulte la sección en el documento titulada "Verificación de pago simplificada") que elimina la necesidad de ver la cadena completa, a costa de externalizar la confianza a los mineros.