Я несколько дней бился головой о стол, пытаясь правильно понять протокол segwit.
Еще одно препятствие застало меня врасплох, и я изо всех сил пытаюсь понять концепцию «scriptCode:», используемую в примерах подписи bip0143 https://github.com/bitcoin/bips/blob/master/bip-0143.mediawiki# Спецификация
Я понимаю, что scriptPubKey - это в основном условия блокировки, накладываемые на вывод при их расходовании. И я также понимаю, что scriptSig должен выкупить ранее заблокированный вывод (предназначенный для моего pubkey/pubkeyhash).
Я довольно хорошо разобрался с тем, что только что сказал выше, когда элементы данных scriptSig помещаются в стек, а затем оцениваются pubKeyHash и т. д. Но теперь есть это странное поле «scriptCode», которое выглядит подозрительно идентичным p2pkh pubKeyScript.
Итак, я пришел к выводу, что он просто используется одинаково в каждом hashPreImage:
DUP HASH160 <keyhash> EQUALVERIFY CHECKSIG
Но потом я начал думать о порядке оценки стека и снова запутался. Каков порядок оценки стека? Это: отправка данных scriptSig> оценка pubKeyScript> scriptCode? А если есть данные свидетелей? Когда это помещается в стек? Или я тут совсем не в теме?
Еще одна вещь, которая меня смущает, это оценка p2sh-p2wpkh. Я не понимаю, почему scriptSig должен быть толчком redeemScript:
0 <20-byte-key-hash>
вновь подчеркивая мой главный вопрос. Я борюсь с концепцией scriptCode и порядком оценки сценария в целом. Я хотел бы знать, всегда ли scriptCode имеет один и тот же формат, если я планирую подписывать только p2sh-p2wpkh, pk2pkh, pk2pkh
Порядок выполнения такой:
scriptCode — это просто имя для «исполняемого кода». Внутри оценки scriptPubKey он равен scriptPubKey. Внутри оценки redeemScript он равен redeemScript. Внутри оценки сценария свидетеля он равен сценарию свидетеля.
криптодескриптор
Питер Уилле
Мэлоун