Разберу оптимистический сценарий
1. Заносим scriptSig в стэк
pubKey->signature
Всё правильно. Только что значит "заносим в стек"? Кто его заносит?
Поймите: scriptSig - это тоже скрипт
и его просто выполняютКогда-то раньше не было ограничений на этот скрипт - можно было любые
конанды использовать. Потом решили что достаточно только пуш-операций.
Остальное тоже можно (вроде софт-форк ограничивающий множество
доступных в scriptSig операций не вводили), но нестандартно.
Повторяю вопрос. Каким должен быть scriptSig чтобы после выполнения сперва scriptSig а потом этого scriptPubKey
на вершине стека было бы ненулевое число? Ответ - одним словом.
Что-то тут неясно. Во первых scriptSig - это ж набор параметров, почему он должен выполнятся?
Во вторых чтоб на выходе scriptPubKey было ненулевое число, сценарий должен дойти до конца и вернуть
true. А это значит:
Каждый отдельный скрипт не обязан, чтобы на стеке после его выполнения было ненулевой значение на вершине.
Транзакция считается валидной если после последовательного выполнения scriptSig и scriptPubKey
на вершине стека ненулевое значение. Вам надо понять, что проверка транзакции - это именно что выполнение
scriptSig и scriptPubKey над одним объектом стека. scriptSig туда кладет, scriptPubKey - забирает и проверяет.
В первых версиях биткойна вообще проверка транзакции проходила так, что scriptSig и scriptPubKey склеивались
в один байтовый массив и выполнялись как один скрипт. Потом Сатоши допёр почему так нельзя делать.
1. scriptSig должен состоять из публичного ключа и сигнатуры
2. сигнатура должна соответсвовать дайджесту
Это только для расходования p2pkh-выходов.
Есть же еще другие типы выходов например pay-to-public-key
в этом случае scriptPubkey
OP_CHECKSIG (когда я пишу в угловых скобках - это значит операция:положить в стек)
и scriptSig соответствующий этому scriptPubkey - это просто
3. еще и полиси правило про один ненулевой элемент не мешало бы соблюсти.
Как на это ответить одним словом?
Причем тут OP_0 и scripthash?
Мы к сегвиту уже перешли. Рассматриваем как видит сегвит-транзакции обычная старая нода.