P2SH-P2WPKH — всегда ли использует SegWit UTXO?

Я читал много документов о структуре транзакций BTC и нахожу их действительно запутанными, когда дело доходит до истории с SegWit.

Итак, самое первое, если у меня есть адрес P2SH-P2WPKH, означает ли это, что все выходы на этот адрес (UTXO) по определению являются UTXO segwit?

В документах ( https://bitcoincore.org/en/segwit_wallet_dev/ ) сказано:

Генерация и проверка подписи для P2SH-P2WPKH

Для расходования несегвитного UTXO алгоритм генерации подписи не изменился.

Для расходования П2Ш-П2ВПХ:

  • scriptSig ДОЛЖЕН содержать ТОЛЬКО push redeemScript

...

Таким образом, либо все UTXO для адреса P2SH-P2WPKH являются segwit, либо они являются SegWit, если транзакция SegWit была сделана на этот адрес (что на самом деле не имеет большого смысла для меня, так как тогда возникает проблема куриного яйца).

Почему они написали эту часть «Для расходования несегвитного UTXO алгоритм генерации подписи неизменен» , какой случай он охватывает? Если у вас есть адрес P2SH-P2WPKH, но вы берете иностранные UTXO для траты (которые были направлены не на ваш адрес)?

Еще одна непонятная часть — скрипты для адреса P2SH-P2WPKH. Итак, вот мой примерный адрес: 3MxYPuvEcKDdaEG1xoGyddqir6C4b66MJi.

И вот транзакция, которая была совершена с ним: https://blockchain.info/rawtx/6c2806587d5cdb3f0363e43f60b4a84baf37b3012fbde02f108f4eb1bdcede42

На основе этого pubKeyScript вывода - это a914de523116b281c96ff1e204ea2ff435b75d48f0de87 , что переводится как:

OP_HASH160 de523116b281c96ff1e204ea2ff435b75d48f0de OP_EQUAL

Итак, de523116b281c96ff1e204ea2ff435b75d48f0de — это hash160 скрипта выкупа. Единственный найденный мной скрипт выкупа, который соответствует этому хэшу, выглядит следующим образом:

0 389f26d8d616cb96df1cfd6d9989248a30b933b9

Который является программным сценарием свидетеля v0 (0 sha160sha256 (pubkey), так что это означает, что я должен создавать транзакции SegWit, верно? "0" нажать туда я верю.

Я чувствую, что делаю что-то не так в этой части, и в результате подписываюсь либо не так, либо не так...

Очень ценю любые объяснения.

Ответы (1)

если у меня есть адрес P2SH-P2WPKH, означает ли это, что все выходы на этот адрес (UTXO) по определению являются UTXO segwit?

Да, биткойн, отправленный на P2SH-P2WPKHадрес, создаст segwit UTXO.

Почему они написали эту часть «Для расходования несегвитного UTXO алгоритм генерации подписи неизменен», какой случай он охватывает? Если у вас есть адрес P2SH-P2WPKH, но вы берете для траты какие-то иностранные UTXO (которые были направлены не на ваш адрес)?

Я думаю, вы правы, это звучит так, как будто вы просто говорите, что если вы хотите отправить на адрес SegWit, вам не нужно подписывать ввод без SegWit иначе, чем раньше.

Расход P2SH(P2WPKH)

Вот хороший справочный пример: BIP 141: P2SH(P2WPKH) . Чтобы потратить биткойны, отправленные на ваш адрес 3MxYPuvEcKDdaEG1xoGyddqir6C4b66MJi, вы должны предоставить следующее:

witness:      <signature> <pubkey>
scriptSig:    <0 <20-byte-key-hash>>
              (0x160014{389f26d8d616cb96df1cfd6d9989248a30b933b9})

Возможно, вы забываете о push-операциях 0x16и/или 0x14в scriptSig?

Yes, Bitcoin sent to a P2SH-P2WPKH address will produce a segwit UTXO.Технически тип utxo по-прежнему p2sh. Он раскрывается как segwit только тогда, когда он потрачен. Вы могли бы полностью потратить его как p2sh, если бы вы могли взломать скрипт выкупа, который удовлетворяет хэшу и может быть решен вами, хотя это довольно невозможно. Несмотря на это, сам вывод - p2sh.
@RaghavSood Правда, было бы невозможно определить, что это был SegWit UTXO, потому что это сценарий выкупа, который является SegWit.
Спасибо за ответ и комментарии, теперь более понятно что к чему :) У меня нет 0x16, вот мой полный скрипт: "script": "0014389f26d8d616cb96df1cfd6d9989248a30b933b9", 0x16 тоже требуется?
Basically here is serialized tx I've 0100000000010142decebdb14e8f102fe0bd2f01b337af4ba8b4603fe463033fdb5c7d5806286c00000000160014389f26d8d616cb96df1cfd6d9989248a30b933b9ffffffff0210270000000000001976a914eeba84c4b62a6b6db8f1e0a1daffa0eccde33adf88acbe2100000000000017a914de523116b281c96ff1e204ea2ff435b75d48f0de8702483045022100fc44e10e8ab2e344c7e90f04f4f21a313850cd8eaebb0320edbc5e2d34c749b70220369da1b85125babd90a067d47e4034bc15ca1b9631ed5c8554148be3a4349d19012102ed991ef73f82488def8031fcccc4d51de840e7f17e3ad5d820781df0b4ee6e0600000000
Вам нужен , 0x16потому что он говорит интерпретатору поместить в стек следующие 22 байта (сценарий выкупа).