Към съдържанието
ДаретеEN

Скриптовият език

P2SH-P2WSH

P2SH-P2WSH, или вложен P2WSH, обвива SegWit скриптово заключване в P2SH изход, който започва с 3. Вижте двата хеша, witness и цената.

От Dimitar Zurnov · Обновено на 4 ноември 2026
Адаптирано от Learn Me a Bitcoin на Greg Walker.

P2SH-P2WSH е вложена форма на P2WSH. Той слага P2WSH заключване, което съдържа SHA-256 хеша на собствен скрипт, в стария P2SH изход. Адресът започва с 3, така че портфейлите, които още не могат да пращат към bc1 адреси, все пак могат да платят. Когато го харчите, witness носи собствения скрипт и данните, които му трябват, така че харченето запазва SegWit отстъпката.

Формата върши същата работа като P2SH-P2WPKH, но за скриптове, а не за единични ключове. Основната ѝ употреба е при мултисиг схеми.

Защо е било нужен P2SH-P2WSH?

Когато SegWit е бил въведен, много портфейли и борси са могли да плащат само на P2SH адреси. P2SH-P2WSH позволява на подателя да плати на адрес 3, а получателят пак може да похарчи монетите като native P2WSH. Това е междинна стъпка. Ако портфейлът ви може да праща към bc1 адрес, ползвайте директно P2WSH.

Как изглежда P2SH заключването?

Във веригата изходът изглежда като всеки друг P2SH изход: OP_HASH160, push на 20 байта и OP_EQUAL. Като hex е 23 байта:

a914257014cec2f75c19367b2a6a0e08b9f304108e3b87

Изход 0 на трансакция c57007980fabfd7c44895d8fc2c28c6ead93483b7c2bfec682ce0a3eaa4008ce носи това заключване. Трансакцията е била потвърдена в блок 657,066.

20-байтовият хеш е HASH160 на P2WSH заключване, което е 0020 плюс 32-байтов SHA-256 хеш:

P2WSH заключване: 0020973cfd44e60501c38320ab1105fb3ee3916d2952702e3c8cb4cbb7056aa6b47f
HASH160:          257014cec2f75c19367b2a6a0e08b9f304108e3b

P2SH слоят е това, което прави изхода достъпен за по-стари портфейли. P2SH адресът кодира този хеш с префикс 05, което дава 3 в началото. Самият адрес не показва вътрешното заключване. То се вижда едва когато изходът се похарчи.

Какво има в отключващия скрипт?

Отключващият скрипт на харченето съдържа един push: 34-байтовото P2WSH заключване. Push-ът добавя един байт за дължина отпред, така че отключващият скрипт е 35 байта:

220020973cfd44e60501c38320ab1105fb3ee3916d2952702e3c8cb4cbb7056aa6b47f

Първият байт, 22, е 34 в десетична бройна система и показва дължината на push-а. Вход 0 на трансакция 55c7c71c63b87478cd30d401e7ca5344a2e159dc8d6990df695c7e0cb2f82783 разкрива този отключващ скрипт. Трансакцията е била потвърдена в блок 657,156.

Отключващият скрипт не трябва да съдържа нищо друго освен този push. Правилата на BIP 141 отхвърлят вложено харчене, в което има каквото и да е друго в отключващия скрипт.

Какво има в witness?

Witness на P2SH-P2WSH харчене има същата структура като директния P2WSH witness. Примерът по-долу харчи 2-of-3 мултисиг, така че witness съдържа празен елемент (dummy), два подписа и witness скрипта:

04
00
47  (подпис от 71 байта)
47  (подпис от 71 байта)
69  (witness скриптът, 105 байта)

Като hex witness е:

0400473044022047ebba593cba4048da04316b9fb6c076d95d17175d7560edc93868a7d170767502203d0ce939ae462ca685a15f5fd3a64b7a1793cb10473665d5bedd3322c55a2b1001473044022022a8a0ae1f80934abb38d4f8c3febf6f5c5c43e7e70460aa71f9a895aaea4d950220023b8f4d2fd90abdbe6f80c9bcb2b38c7326e5e9e0f3b1ea25a5499d240cacb20169522103591da02bf7c80dc5d0edee4bbbfad7e58320785e3e54d4dab117152361f7002c21027ea2bc65ce49dcd748e4e41a0c8881be388b9182ad5e47579a0de0119803827b2103c5fdaf887f76119a73a7f738d5d4a451ff07bbbc83422c529452d8a36ae59e3953ae

Witness скриптът е последният елемент и играе ролята на redeem script (скриптът, който се разкрива при харчене). Това е 2-of-3 мултисиг: OP_2, три компресирани публични ключа по 33 байта, OP_3 и OP_CHECKMULTISIG. Witness е общо 252 байта. Подписите следват правилата на BIP 143, както при всяко SegWit харчене.

Как биткойн проверява харченето?

P2SH-P2WSH харченето минава през две проверки на хеш, вложени една в друга:

  1. Външната P2SH проверка. Биткойн хешира push-а от отключващия скрипт с HASH160. Резултатът трябва да е равен на хеша в P2SH заключването.
  2. Вътрешната P2WSH проверка. Биткойн хешира последния елемент на witness, witness скрипта, със SHA-256. Резултатът трябва да е равен на 32-байтовия хеш, който отключващият скрипт е разкрил. После witness скриптът се изпълнява с останалите елементи на witness в стека, както при директно P2WSH харчене.
Два хеша са вложени в P2SH-P2WSH заключването: SHA-256 на witness скрипта, после HASH160 на P2WSH заключването. Witness скрипт, 105 байта 2-of-3 мултисиг, разкрит при харчене SHA-256, веднъж P2WSH заключване: 34 байта 973cfd44e60501c38320ab1105fb3ee3 916d2952702e3c8cb4cbb7056aa6b47f 0020, после 32-байтовият SHA-256 HASH160 (външният) P2SH заключване: 23 байта 257014cec2f75c19367b2a6a0e08b9f304108e3b 20-байтовият хеш в P2SH заключването външен HASH160, вътрешен SHA-256
Вътрешният хеш е SHA-256, с 32 байта. Външният хеш е HASH160, с 20 байта.

Двата хеша използват различни функции нарочно. Външният P2SH слой ползва HASH160, както при P2SH от BIP 16. Вътрешният P2WSH слой ползва един проход на SHA-256, който дава 256-битов хеш. Страницата за P2WSH обяснява защо това има значение.

Колко струва?

Отключващият скрипт не получава отстъпка, а witness я получава. Като пример с 2-of-3 мултисиг и 71-байтови подписи, трите вида харчене се сравняват така:

Отключване Отключващ скрипт (байта) Witness (байта) Общо (байта) Виртуални байта
P2SH 252 0 252 252
P2SH-P2WSH 35 252 287 98
P2WSH 0 252 252 63

252-байтовият witness се брои като 63 виртуални байта, защото всеки witness байт се брои за 0.25. Вложената форма добавя 35-байтовия отключващ скрипт и стига до 98 виртуални байта. Това е пак много по-малко от 252 при стария P2SH. Таксите се задават на виртуален байт, така че вложеното харчене струва по-малко от стария P2SH и повече от P2WSH. Виртуалният байт обяснява мерната единица.

Плащането към вложения изход струва малко по-малко от плащане към native P2WSH заключване. Вложеният изход е 23 байта, а P2WSH заключването е 34 байта. Допълнителните 11 байта са цената на 32-байтовия хеш. Харченето обаче струва повече: 35-байтовият отключващ скрипт добавя 35 виртуални байта към харченето.

Как се прави P2SH-P2WSH адрес?

Адресът е P2SH адрес. Започвате от P2WSH заключването, после:

  1. Приложете HASH160 към 34-байтовото P2WSH заключване. Получавате 20 байта.
  2. Кодирайте 20-те байта с Base58Check, с префикс 05 за P2SH адрес. Вижте Base58 и контролната сума.

Резултатът започва с 3 и обикновено е дълъг 34 знака. Нищо в адреса не показва, че е вложен. Формата се вижда едва когато изходът се похарчи.

Трябва ли да го ползвате?

Ползвайте P2SH-P2WSH само когато подателят може да плати на адрес 3, а вие искате мултисиг или собствен скрипт. Иначе ползвайте P2WSH. Харченето му е по-евтино, а 11-те допълнителни байта, които добавя към плащането, са малка цена.

Формата е стандартна и валидна, а по-стари изходи от този вид вече има във веригата. Затова е полезно да знаете как да го прочетете. Щом знаете как работят P2SH и P2WSH поотделно, вложеният P2WSH е просто двете заедно.

В този раздел: Скриптовият език

Целият курс „Биткойн от нулата“

Нещо не изглежда наред? Кажете ни