BIP16 дает следующий пример, чтобы объяснить «Платить за хэш сценария»:
scriptSig: [signature] {[pubkey] OP_CHECKSIG}
scriptPubKey: OP_HASH160 [20-byte-hash of {[pubkey] OP_CHECKSIG} ] OP_EQUAL
Но я не понимаю, что здесь происходит. Я попытался выполнить скрипт на бумаге (и предположил, что части в квадратных/фигурных скобках рассматриваются как константы):
[signature]
и {[pubkey] OP_CHECKSIG}
помещаются в стекOP_HASH160
хеши{[pubkey] OP_CHECKSIG}
scriptPubKey
в стекOP_EQUAL
даетTrue
[signature]
вообще не проверяется!Если {[pubkey] OP_CHECKSIG}
выполняется, то scriptSig выдаст только True
, что имеет еще меньше смысла.
Чтобы сформулировать четкий вопрос: как работают сценарии «Pay to Script Hash», особенно в этом примере?
Вы правы до сих пор, вы просто остановились, прежде чем закончили. Как сказано в BIP16, он «определяет дополнительные правила проверки, которые применяются только к новым транзакциям» — в частности, «{сериализованный скрипт} извлекается из исходного стека, и транзакция снова проверяется с использованием извлеченного стека и десериализованного скрипта в качестве скриптPubKey."
Так:
1) Скрипт извлекается из стека, остается только [signature]
в стеке.
2) Добавляется десериализованный скрипт, оставляя [signature] [pubkey] OP_CHECKSIG
.
2) Транзакция снова проверяется, то есть происходит обычная проверка подписи по указанному открытому ключу.
Мюльхаузен
Эрлз