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

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

P2SH

P2SH биткойн (bitcoin) заключва монетите към хеш на скрипт, така че пълният скрипт чака до харченето. Вижте hex записа, redeem скрипта и примери.

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

P2SH, съкращение от pay to script hash (плащане към хеш на скрипт), заключва изход в биткойн (bitcoin) към хеш на скрипт. Този скрипт се нарича redeem скрипт и се разкрива едва когато монетите се похарчат. Изпращачът вижда само 20-байтов хеш, който може да се сподели като адрес, който започва с 3. P2SH най-често се използва за мултисиг. Той е станал стандартен през април 2012 г. по BIP 16. P2SH е остарял тип, а P2WSH върши същата работа за SegWit.

Как изглежда заключващият скрипт на P2SH?

P2SH заключване: OP_HASH160, 20-байтов хеш на скрипт, после OP_EQUAL. Заключващият скрипт на P2SH OP_HASH160: хешира redeem скрипта a9 поставя в стека 20 байта 14 хешът на скрипта, 20 байта 748284390f9e263a4b766a75d0633c50426eb875 OP_EQUAL: сравнява двата хеша 87 23 байта: a9 + 14 + 20 байта + 87.
Хешът на скрипта е HASH160 на redeem скрипта.

Цялото заключване е 23 байта:

a914748284390f9e263a4b766a75d0633c50426eb87587

a9 е OP_HASH160, 14 поставя в стека 20 байта, а 87 е OP_EQUAL. Тези 20 байта са хешът на скрипта, 748284390f9e263a4b766a75d0633c50426eb875. Изход 1 на 450c309b70fb3f71b63b10ce60af17499bd21b1db39aa47b19bf22166ee67144 използва това заключване.

Как изглежда отключващият скрипт?

Отключващият скрипт (scriptSig) съдържа елементите, които удовлетворяват redeem скрипта, а самият redeem скрипт е последният елемент, поставен в стека. Ето харчене на заключване като горното:

00473044022100d0ed946330182916da16a6149cd313a4b1a7b41591ee52fb3e79d64e36139d66021f6ccf173040ef24cb45c4db3e9c771c938a1ba2cf8d2404416f70886e360af401475121022afc20bf379bc96a2f4e9e63ffceb8652b2b6a097f63fbee6ecec2a49a48010e2103a767c7221e9f15f870f1ad9311f5ab937d79fcaeee15bb2c722bca515581b4c052ae

00 е празният dummy елемент, който OP_CHECKMULTISIG изисква. 47 поставя в стека 71-байтов подпис. Последното 47 поставя в стека 71-байтовия redeem скрипт. Вход 11 на 30c239f3ae062c5f1151476005fd0057adfa6922de1b38d0f11eb657a8157b30 е това харчене.

Декодиран, redeem скриптът е OP_1, два 33-байтови публични ключа, OP_2 и OP_CHECKMULTISIG. Той е 1-of-2 P2MS заключване.

Как работи P2SH скриптът?

P2SH отключване на два прохода: първо проверка на хеша, после redeem скриптът се изпълнява като заключване. Два прохода през P2SH отключване scriptSig: данните, после redeem скриптът като последен елемент Стъпка 1: хеш на redeem скрипта сравнява се с хеша на скрипта в заключването ако съвпаднат Стъпка 2: redeem скриптът се разделя изпълнява се, сякаш е самото заключване валиден, ако остане един истински елемент
Redeem скриптът става заключване за втория проход.

P2SH скриптът се изпълнява на два прохода. Това е единственият тип скрипт, който работи така.

  1. Стандартното изпълнение. Отключващият скрипт поставя своите елементи в стека, а стекът се копира. OP_HASH160 хешира redeem скрипта, а OP_EQUAL сравнява резултата с хеша на скрипта в заключването. Ако се различават, скриптът се проваля.
  2. Redeem скриптът. Redeem скриптът се изважда от стека и се разделя на опкодове и данни. После се изпълнява като заключване, а елементите на харчещия остават в стека.

Така redeem скриптът работи като втори заключващ скрипт. В примера по-горе това е P2MS заключване, така че се изпълнява по същия начин като P2MS харчене.

Какво е redeem скрипт?

Redeem скриптът е всеки валиден скрипт, който се поставя като данни в отключващия скрипт. От Bitcoin Core 0.10 насам нодовете препращат P2SH харчения, чийто redeem скрипт не е от стандартните типове. Бележките към версия 0.10.0 описват промяната.

Redeem скриптът може да е дълъг най-много 520 байта. Това стига за мултисиг с до 15 компресирани ключа. Когато приключи, скриптът трябва да остави в стека точно един истински елемент, обикновено OP_1. Всеки елемент под най-горния прави харченето нестандартно, затова нодовете не го препращат, дори когато най-горният елемент е истина.

Какво е хешът на скрипта?

Хешът на скрипта е HASH160 на redeem скрипта, тоест SHA-256, после RIPEMD-160. Хешът на redeem скрипта от примера по-горе е 748284390f9e263a4b766a75d0633c50426eb875, същата стойност като в заключването.

Какъв адрес има P2SH заключването?

P2SH заключването има собствен адрес. Той е Base58Check кодирането на хеша на скрипта, с едно-байтов префикс 05 в основната мрежа, така че адресът започва с 3. В тестовата мрежа префиксът е c4, а адресът започва с 2. Хешът на скрипта по-горе дава адреса 3CK4fEwbMP7heJarmU4eqA3sMbVJyEnU3V. Портфейлите декодират адрес, който започва с 3, за да вземат хеша, и после построяват P2SH заключването.

Защо да използваме P2SH?

  • Изпращачът плаща за кратко заключване. Изходът носи 23 байта, колкото и дълъг да е redeem скриптът. Цената на по-големия скрипт се плаща от харчещия.
  • Заключването казва по-малко. Докато монетите не се похарчат, изходът показва само хеш, така че никой не може да разбере какъв скрипт стои зад него.
  • UTXO множеството остава малко. Всеки неизхарчен изход е в UTXO множеството, което нодовете пазят в паметта и на диска. Краткото заключване им спестява място.

Цената е, че redeem скриптът заема място във веригата, когато монетите се похарчат.

Кои P2SH трансакции можете да проверите в нашия explorer?

И двете задачки са валидни, и двете харчения са били включени в блок. От 0.10 насам redeem скриптът на P2SH не е ограничен до стандартните типове, затова тези задачки са необичайни, но не са забранени. За стандартните типове скриптове вижте общата страница за скрипта.

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

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

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