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?
Цялото заключване е 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 скриптът се изпълнява на два прохода. Това е единственият тип скрипт, който работи така.
- Стандартното изпълнение. Отключващият скрипт поставя своите елементи в стека, а стекът се копира.
OP_HASH160хешира redeem скрипта, аOP_EQUALсравнява резултата с хеша на скрипта в заключването. Ако се различават, скриптът се проваля. - 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?
- Изход 1 на a0f1aaa2fb4582c89e0511df0374a5a2833bf95f7314f4a51b55b7b71e90ce0f е похарчен от вход 2 на 4d8eabfc8e6c266fb0ccd815d37dd69246da634df0effd5a5c922e4ec37880f6. Redeem скриптът му е 1-of-2 мултисиг.
- Изход 0 на d3adb18d5e118bb856fbea4b1af936602454b44a98fc6c823aedc858b491fc13 е похарчен от вход 0 на cc11ca9e9dc188663c41eb23b15370f68eded56b7ec54dd5bc4f2d2ae93addb2. Redeem скриптът му е 2-of-3 мултисиг.
- Изход 1 на 7d46745463a28049cb93d2c964320912d9c296c1038cb24cc3716255c397a87f е похарчен от вход 0 на 09afa3b1393f99bb01aa754dd4b89293fd8d6c9741488b537d14f7f81de1450e. Redeem скриптът му е малка задачка:
OP_3DUP OP_ADD OP_9 OP_EQUALVERIFY OP_ADD OP_7 OP_EQUALVERIFY OP_ADD OP_8 OP_EQUALVERIFY OP_1. Харчещият трябва да постави в стека три числа, a, b и c, така че a+b=8, a+c=7 и b+c=9. Стойностите 3, 5 и 4 вършат работа. - Изход 0 на 2c6c3a1319c3e42b4801dab62e3d3d59c51c3535b8dad20e9580650f114c7026 е похарчен от вход 4 на 8d31992805518fd62daa3bdd2a5c4fd2cd3054c9b3dca1d78055e9528cff6adc. Redeem скриптът му е задача за колизия на хеш: харчещият трябва да подаде два различни входа със същия SHA-1 хеш.
И двете задачки са валидни, и двете харчения са били включени в блок. От 0.10 насам redeem скриптът на P2SH не е ограничен до стандартните типове, затова тези задачки са необичайни, но не са забранени. За стандартните типове скриптове вижте общата страница за скрипта.
В този раздел: Скриптовият език
Целият курс „Биткойн от нулата“
Нещо не изглежда наред? Кажете ни