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

Я прочитал следующее из книги << Освоение биткойнов >>

«Как вы могли заметить, транзакция содержит пустой scriptSig, потому что мы еще не подписали ее. Без подписи эта транзакция бессмысленна, мы еще не доказали, что владеем адресом, с которого поступает неизрасходованный вывод».

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

Ответы (2)

Предположим, вы понимаете, как работает криптография с открытым ключом . Короче говоря, можно проверить принадлежность адреса, проверив подпись. Действительная подпись может быть сгенерирована только владельцем закрытого ключа.

Детали проверки подписи в биткойнах описаны здесь

Не вдаваясь в подробности, OP_xxxэто операции со стеком. Например, OP_DUPэто дублирование вершины стека. В основном это

  • сначала хэширует открытый ключ по операции OP_HASH160и проверяет, идентичен ли результат pubKeyHashпо операцииOP_EQUALVERIFY
  • затем проверяет sigи pubKeyпри эксплуатацииOP_CHECKSIG

Вы можете прочитать больше о OP_CHECKSIG здесь

Пожалуйста, уточните, что ссылки объясняют в ответе. В нынешнем виде этот ответ бесполезен, если ссылки перестают работать.

Право собственности подтверждается для каждого ввода путем предоставления действительной подписи в scriptSigполе. Если одна из подписей отсутствует, вся транзакция недействительна.

Для scriptPubKeyкаждого вывода в приведенном вами примере заблокирован биткойн-адрес. Биткойн-адрес — это, в двух словах, хэш открытого ключа. Таким образом, для предоставления действительной подписи требуется секретный ключ, принадлежащий той же паре ключей открытого ключа, на которую ссылаются в каждом вводе.