"scriptSig" для P2SH-P2WPKH

Я не уверен, что понимаю поля моего ввода. У меня есть адрес 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 нужен ХЭШ дополнительного открытого ключа?

Ответы (1)

Я так понимаю: в "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 обратно совместимым.

Таким образом, правильная интерпретация ScriptPubkey для адреса P2SH-P2WPKH — «OP_HASH160 RedeemScript (= открытый ключ HASH160). Верно?
Почти. Скрипт_pubkey будет иметь вид «OP_HASH160 < HASH160 RedeemScript (= OP_0 <Открытый ключ HASH160>) > OP_EQUAL». Вы опускаете «OP_0» в сценарии выкупа (помимо OP_EQUAL в script_pubkey). Этот OP_0 очень важен, потому что это шаблон, который запускает специальное правило в узлах для обработки его как отдельной транзакции-свидетеля, а не только как обычной транзакции P2SH. Это позволит узлу извлечь подпись и открытый ключ из поля-свидетеля и поместить их в стек для окончательной оценки.