Я анализировал биткойн-транзакцию, которая работает как с Segwit, так и без Segwit для скриптов с мультиподписью. Вот транзакция: https://www.blockchain.com/en/btc/tx/80975cddebaa93aa21a6477c0d050685d6820fa1068a2731db0f39b535cbd369
Обратите внимание, что по индексам 0, 1 и 2 у нас есть скрипт разблокировки в файле scriptsig, а по индексу 3 он использует программу-свидетель. Никаких проблем до сих пор.
Что меня беспокоит, так это то, почему, когда я получаю скрипт погашения с индексами 0, 1 и 2 и выполняю ripemd60, sha256, создаю контрольную сумму и кодирую в base58, он генерирует публичный адрес, как мы можем видеть на экране blockchain.com. Но когда я делаю то же самое, используя сценарий погашения, который находится в разделе свидетелей, он возвращает мне совершенно другой адрес, почему это происходит?
Кроме того, что такое scriptSig на индексе 3? Как он генерируется?
Пример:
Выкупить скрипт индекса 0:
522102194e1b5671daff4edc82ce01589e7179a874f63d6e5157fa0def116acd2c3a522103a043861e123bc67ddcfcd887b167e7ff9d00702d1466524157cf3b28c7aca71b2102a49a62a9470a31ee51824f0ee859b0534a4f555c0e2d7a9d9915d6986bfc200453ae
Адрес, сгенерированный из индекса 0 с помощью моего скрипта:
3JUJgXbB1WpDEJprE8wP8vEXtba36dAYbk
Это то же самое, что и транзакция.
Погасить скрипт индекса 3 (Segwit):
5221021e6617e06bb90f621c3800e8c37ab081a445ae5527f6c5f68a022e7133f9b5fe2103bea1a8ce6369435bb74ff1584a136a7efeebfe4bc320b4d59113c92acd869f38210280631b27700baf7d472483fadfe1c4a7340a458f28bf6bae5d3234312d684c6553ae
Адрес, сгенерированный из индекса 3 с помощью моего скрипта:
36aKiVksQRLKwByBYVz3KwquFcvHZkwroP
Адрес транзакции, восстановленный с blockchain.com
3CYkk3x1XUvdXCdHtRFdjMjp17PuJ8eR8z
Вы вычисляете только адрес P2SH для сценария segwit. Однако это не просто P2SH, это скрипт Segwit, заключенный внутри P2SH. На самом деле вам нужно сначала взять свидетельский скрипт (скрипт с несколькими подписями или segwit redeemScript) и создать с ним выходной скрипт P2WSH. Затем этот сценарий становится сценарием redeemScript для сценария P2SH.
Так дано
5221021e6617e06bb90f621c3800e8c37ab081a445ae5527f6c5f68a022e7133f9b5fe2103bea1a8ce6369435bb74ff1584a136a7efeebfe4bc320b4d59113c92acd869f38210280631b27700baf7d472483fadfe1c4a7340a458f28bf6bae5d3234312d684c6553ae
как свидетельский скрипт, вы производите
002044c55c1da36a576217259c3bc21b0c3943f7eb3ff4e3c381d9fd3502434b9e87
как искупительный скрипт. Это сценарий вывода P2WSH. Затем это хэшируется для создания хэша в сценарии P2SH:
a914771962306e72e479245d48e879dd2a1862225b4c87
который имеет адрес
3CYkk3x1XUvdXCdHtRFdjMjp17PuJ8eR8z
Аллан Романато
Эндрю Чоу
Аллан Романато
Эндрю Чоу
Аллан Романато
Эндрю Чоу