Попытка понять Pay-to-Public-Key-Hash

Я новичок в биткойнах, и я пытаюсь понять хеш-код Pay-to-Public-Key-Hash (P2PKH) из книги: Mastering Bitcoin: Unlocking Digital Cryptocurrencies (стр. 127). Я понимаю, что цифровые ключи (которые получены из закрытых ключей) на самом деле не хранятся в сети, а вместо этого хранятся пользователями в кошельке.

Например : Алиса хочет отправить Бобу 1-BTC:

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

Вопрос :

  • Итак, как мы можем проверить, что эта транзакция действительна, не имея открытого ключа?
  • Если мы прикрепляем открытый ключ к сообщению, то зачем вообще тратить время на поиск хэша открытого ключа?
  • Мы храним открытые ключи в какой-то централизованной базе данных?
  • Если получатель предоставляет открытый ключ и подтверждает, что транзакция действительна, как другие могут подтвердить, что транзакция была действительной?
Я бы добавил: «Что Messageэто содержится в вашем примере?»

Ответы (1)

Итак, как мы можем проверить, что эта транзакция действительна, не имея открытого ключа?

Подпись включает в себя открытый ключ, соответствующий закрытому ключу, с помощью которого была сделана подпись.

Если мы прикрепляем открытый ключ к сообщению, то зачем вообще тратить время на поиск хэша открытого ключа?

Непонятно, что вы подразумеваете под «открытым ключом». О чьем открытом ключе вы говорите? Открытый ключ Боба отсутствует в сообщении.

Мы храним открытые ключи в какой-то централизованной базе данных?

Когда открытый ключ отправляется с подписью, открытый ключ находится в транзакции. Транзакция включается в блок, и этот блок навсегда является частью блокчейна.

Если получатель предоставляет открытый ключ и подтверждает, что транзакция действительна, как другие могут подтвердить, что транзакция была действительной?

Непонятно, что вы имеете в виду под "этим". Чтобы подтвердить транзакцию, вам просто нужно убедиться, что она имеет право требовать средства, на которые она пытается претендовать. Вам все равно, что он делает с этими средствами, просто он имеет право решать, что с ними делать. Так что вам не нужно много знать о получателях — достаточно, чтобы идентифицировать их, когда они приходят за своими средствами. Хэш их открытого ключа делает это.

"Подпись включает открытый ключ..." Я так понимаю, это <SCRIPTSIG> tx-in? То есть <SCRIPTSIG>состоит из подписи "01" (OP_SIGHASHALL) и затем открытого ключа.