Я не уверен, что понимаю поля моего ввода. У меня есть адрес P2SH (Testnet). Это ввод моей транзакции:
"vin": [
{
"txid": "a61389ff9af670770182198a984a4c1785625c60795bd57645ecc78765b23679",
"vout": 1,
"scriptSig": {
"asm": "0014778daf651b21684b572644b47d551fce0ff71c74",
"hex": "160014778daf651b21684b572644b47d551fce0ff71c74"
},
"txinwitness": [
"3044022034a07f088dd88396cd378912a4ed6a156701b075f0facbbae810677048c390e602205df07e13bf4d56feece791a1b5e4d94bec9c93aae14bb87a1b4c6c54ae9bf2f701",
"032c27921f2d15e7eca768c0e8a8b1aeb863328c74d6c194d41dde2888d4b0e75b"
],
"sequence": 4294967295
}
],
Я так понимаю: в "asm" у меня RedeemScript. В txinwitness у меня есть моя подпись и открытый ключ. Правильный?
Теперь из используемого utxo:
"txid": "a61389ff9af670770182198a984a4c1785625c60795bd57645ecc78765b23679",
"vout": 1,
"address": "2N7MaihNErbNH8XTkuZWtJYPzMQAWMPVKHd",
"label": "",
"redeemScript": "0014778daf651b21684b572644b47d551fce0ff71c74",
"scriptPubKey": "a9149ac58ff47e27214b158b38da04bc8cbf72def14387",
"amount": 0.01944571,
"confirmations": 116,
"spendable": true,
"solvable": true,
"desc": "sh(wpkh([7de694b7/0'/0'/7']032c27921f2d15e7eca768c0e8a8b1aeb863328c74d6c194d41dde2888d4b0e75b))#6z7uwusp",
"safe": true
Я делаю вывод, что использовал выход P2SH-P2WPKH. Итак, в ScriptPubkey я нахожу условие разблокировки (HASH160 открытого ключа моего адреса). В сценарии погашения я нахожу HASH160 сжатого открытого ключа032c27921f2d15...
правильно ли говорить, что в качестве дополнительного условия для разблокировки UTXO P2SH-P2WPKH по сравнению с P2PKH нужен ХЭШ дополнительного открытого ключа?
Я так понимаю: в "asm" у меня RedeemScript. В txinwitness у меня есть моя подпись и открытый ключ. Правильный?
Правильный. в P2SH-P2WPKH свидетель содержит подпись и открытый ключ, а подпись сценария содержит сценарий выкупа.
правильно ли говорить, что в качестве дополнительного условия для разблокировки UTXO P2SH-P2WPKH по сравнению с P2PKH нужен ХЭШ дополнительного открытого ключа?
Тут вы как-то не правы.
Адрес P2SH-P2WPKH — это хеш160 сериализованного сценария выкупа P2WPKH, который должен соответствовать OP_0 <hash160_of_public_key>
BIP0141. Итак, похоже, что вам нужен дополнительный открытый ключ, но на самом деле вы просто используете один и тот же открытый ключ дважды. Один из них входит в скрипт выкупа для script_signature, а другой — для поля-свидетеля, которое отображается рядом с подписью.
Другими словами, дополнительного открытого ключа нет. Это тот же открытый ключ, который заключен в смарт-контракт (сценарий выкупа), определенный BIP0141, сериализованный, а затем хешированный. Теперь этот хеш — тот же хеш, который используется для открытых ключей (хеш160), поэтому выходные данные этих хэшей смарт-контрактов имеют ту же длину, что и хэши открытых ключей, и поэтому их можно спутать с открытыми ключами, когда на самом деле это смарт-контракты. Это сделано специально, чтобы сделать P2SH обратно совместимым.
Мельк
Оскар Серна