Tratando de entender Pay-to-Public-Key-Hash

Soy nuevo en bitcoin y estoy tratando de entender Pay-to-Public-Key-Hash (P2PKH) del libro: Mastering Bitcoin: Unlocking Digital Cryptocurrencies (p. 127). Entiendo que las claves digitales (que se derivan de claves privadas) en realidad no se almacenan en la red, sino que los usuarios las almacenan en una billetera.

Por ejemplo : Alice quiere enviar a Bob 1-BTC:

---------------------------------------------------------
| Sender:    Hash(alice-public-key)                     |
| Receiver:  Hash(bob-public-key)                       |
| Amount:    1-BTC                                      |
| Signature: Hash(Encrypt_{alice-private-key}(Message)) |
---------------------------------------------------------

Pregunta :

  • Entonces, ¿cómo podemos verificar que esta transacción sea válida sin tener la clave pública?
  • Si adjuntamos la clave pública con el mensaje, ¿por qué perder tiempo buscando el hash de la clave pública en primer lugar?
  • ¿Estamos almacenando las claves públicas en alguna base de datos centralizada?
  • Si el destinatario proporciona la clave pública y verifica que la transacción es válida, ¿cómo pueden otros validar que fue una transacción válida?
Agregaría "¿qué es lo Messageque está contenido en su ejemplo?"

Respuestas (1)

Entonces, ¿cómo podemos verificar que esta transacción sea válida sin tener la clave pública?

La firma incluye la clave pública correspondiente a la clave privada que realizó la firma.

Si adjuntamos la clave pública con el mensaje, ¿por qué perder tiempo buscando el hash de la clave pública en primer lugar?

No está claro a qué te refieres con "la clave pública". ¿De quién es la clave pública que estás hablando? La clave pública de Bob no está en el mensaje.

¿Estamos almacenando las claves públicas en alguna base de datos centralizada?

Cuando se envía una clave pública con una firma, la clave pública está en la transacción. La transacción está incluida en un bloque, y ese bloque es parte de la cadena de bloques para siempre.

Si el destinatario proporciona la clave pública y verifica que la transacción es válida, ¿cómo pueden otros validar que fue una transacción válida?

No está claro a qué te refieres con "eso". Para validar una transacción, solo debe asegurarse de que tenga derecho a reclamar los fondos que intenta reclamar. No le importa particularmente lo que haga con esos fondos, solo que tiene derecho a decidir qué hacer con ellos. Por lo tanto, no necesita saber mucho sobre los destinatarios, solo lo suficiente para identificarlos cuando vengan a reclamar sus fondos. El hash de su clave pública hace eso.

"La firma incluye la clave pública..." Entiendo, ¿es el <SCRIPTSIG> de un tx-in? Es decir, <SCRIPTSIG>se compone de firma, "01" (OP_SIGHASHALL) y luego la clave pública.