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

Трансакции

ScriptSig

ScriptSig в биткойн (bitcoin) е кодът за отключване на вход от стара трансакция. Вижте какво съдържа при P2PKH, P2SH и coinbase.

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

ScriptSig е кодът за отключване на вход от стара (legacy) трансакция. Той съдържа данните, които доказват, че можете да похарчите по-ранен изход: обикновено подпис и публичен ключ, записани като данни за push в Script. Изходът, който ScriptSig отключва, има ScriptPubKey, заключването. ScriptSig е ключът, а двете трябва да съвпаднат, за да се похарчи изходът.

SegWit е преместил данните за отключване на по-новите заключвания от ScriptSig във witness. Днес ScriptSig се използва за старите заключвания и за външния слой на P2SH.

Кои заключвания се отключват с ScriptSig?

Старите заключвания се отключват с ScriptSig:

  • P2PK, заключване към публичен ключ, отключвано с един подпис.
  • P2PKH, заключване към хеш на публичен ключ, отключвано с подпис и публичен ключ.
  • P2MS, мултиподписно заключване без обвивка, отключвано с нужния брой подписи.
  • P2SH, заключване към хеш на скрипт, отключвано с входните данни на скрипта и после със самия скрипт.

По-новите заключвания, като P2WPKH и P2WSH, се отключват от witness. Нативният segwit вход, който ги отключва, оставя ScriptSig празен, така че полето за размер е 00.

Как изглежда ScriptSig на P2PKH?

ScriptSig на P2PKH има два push: подписа и публичния ключ. Ето ScriptSig от трансакция 40e331b67c0fe7750bb3b1943b378bf702dce86124dc12fa5980f975db7ec930, вход 0:

483045022100c233c3a8a510e03ad18b0a24694ef00c78101bfd5ac075b8c1037952ce26e91e02205aa5f8f88f29bb4ad5808ebc12abfd26bd791256f367b04c6d955f01f28a772401 2103f0609c81a45f8cab67fc2d050c21b1acd3d37c7acfd54041be6601ab4cef4f31

Прочетете го на части:

  • 48 е push от 72 байта, после самият подпис. Последният байт, 01, е типът sighash, който показва, че подписът покрива всички изходи.
  • 21 е push от 33 байта: компресираният публичен ключ 03f0609c…4cef4f31.

Общо са 107 байта, което е размерът 6b преди него във входа. Заключването на изхода съдържа хеша на този публичен ключ. Скриптът първо проверява, че ключът съвпада с този хеш. После проверява, че подписът е валиден за ключа. Страницата за подписа обяснява втората проверка.

P2PKH ScriptSig записва подпис и публичен ключ, а заключването проверява, че ключът дава хеша в изхода. ScriptSig във входа, който харчи 48 3045022100c233…8a772401 push 72 байта: подпис и байт sighash 21 03f0609c…4cef4f31 push 33 байта: компресиран публичен ключ трябва да съвпада ScriptPubKey в по-ранния изход OP_DUP OP_HASH160 <20-байтов хеш на публичния ключ> OP_EQUALVERIFY OP_CHECKSIG И двете минават: изходът се отключва
И двете проверки трябва да минат, за да се отключи изходът.

Какво съдържа ScriptSig на P2SH?

ScriptSig на P2SH съдържа повече от един вид данни. Последният му push е целият скрипт, наречен redeem script. Всеки push преди него са входните данни, които изпълняват този скрипт. Изходът съдържа само хеша на redeem script, така че целият скрипт се разкрива тук, когато изходът бъде похарчен.

Много P2SH изходи обвиват мултиподписен скрипт, затова ScriptSig често започва с OP_0. Това е известна особеност на оригиналния мултиподписен опкод, който изважда от стека един елемент повече. Тя е безвредна, затова мултиподписните ScriptSig започват с нула.

Какво има в ScriptSig на coinbase?

Трансакцията coinbase, първата във всеки блок, не харчи по-ранен изход. Нейният ScriptSig са свободни данни, които майнърът избира. Единственото правило е дължина от 2 до 100 байта. Майнърите ги ползват, за да сложат съобщение, да се идентифицират като пул или да носят допълнителни данни за nonce.

От блок 227,931 нататък BIP 34 изисква ScriptSig на coinbase да започва с височината на блока. Coinbase трансакцията в генезис блока е класическият пример за свободни данни: ScriptSig-ът му носи заглавие от вестника от 3 януари 2009 г. Подобен текст се среща и в много по-късни coinbase трансакции.

Защо се казва ScriptSig?

Името идва от първоначалния код, където променливата се е наричала scriptSig. Полето е замислено за подписа, който отключва изход, и името остана, въпреки че днес съдържа и други данни. Мислете за него като за кода за отключване на входа.

Следващата страница, Sequence, разглежда последното поле на всеки вход: настройката, която управлява окончателността, replace-by-fee (RBF) и относителното заключване.

Източници

В този раздел: Трансакции

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

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