Я думаю, что дело в том, чтобы "отметка" входной сделка, которая подписывается, чтобы предотвратить одну подпись, которая будет использоваться для более чем на один вход.
Не подпись уже применяется к хэш предыдущей транзакции, а индекс в нем? Зачем вам нужны какие-либо дополнительные данные на всех?
Bitcoin
до выпуска v0.1 была система, где scriptSig и scriptPubKey были слиты до оценки; OP_CODESEPARATOR был включен в скриптах (или scriptSigs) явно отметить, что часть этого каскадного сценарий был хэширования. Механизм был нарушен, поскольку OP_RETURN может быть использован в scriptSig вернуться преждевременно, но кроме этого надзора идеи была звуком. (Фактический выпуск v0.1 вставлено OP_CODESEPARATOR явно перед вызовом EvalScript, нарушая идею, так что я не уверен, что на самом деле Satoshi понял, что могло бы быть возможным)
Установка этого сценария в txcopy scriptSig был механизм, с помощью которого элементы в scriptSig могут быть включены в подписи. Кое-что интересное о SignatureHash это ты
Можно использовать нестандартные hashtypes в обратно совместимом способе: nHashType является операцией AND с маской 0x1F или 0b00011111, перед испытанием против SIGHASH_SINGLE и SIGHASH_NONE, что означает, что, если они настроены на что-либо, кроме этих двух значений хэша подписи вычисляется без изменения Vout. Аналогично биты 6 и 7 nHashType полностью игнорируются. Если бы оригинальный дизайн был сохранен дополнительными SignatureHash () флаги могли быть легко и эффективно были добавлены в мягкой вилке, например:
scriptPubKey: <Публичных> OP_CHECKSIG
scriptSig: <дополнительные данные Хешированных> <подпись>
OP_CHECKSIG имеет несуществующий код, чтобы удалить подпись из склеенного сценария перед вызовом SignatureHash (), поэтому окончательный каскадного скрипт, вставленный в txin scriptSig будет:
<дополнительные данные Хешированных> <Публичных> OP_CHECKSIG
То, что дополнительные беспорядочные данные могли бы быть, например, хэш-значений, идущих в сделку, чтобы позволить подписям, чтобы покрыть сборы. Аналогичным образом можно было бы использовать с SIGHASH_NONE переопределять, как подписи работали. Хотя заметим, что для этого, чтобы быть мягкой вилкой неспособность соответствовать дополнительные данные должны быть обработаны с как непосредственный провал, превращая OP_CHECKSIG в OP_CHECKSIGVERIFY относительно новых возможностей.
Сказав, что мы еще можем сделать это, хотя это становится менее эффективным. В основном вы просто сделать всю вторую подпись, ~ 72 байта стоит, и имеют специальную подпись хэш-бит запуска кода OP_CHECKSIG, чтобы проверить его. Например:
scriptPubKey: <Публичных> OP_CHECKSIG
scriptSig:
Где sig1 использует алгоритм старой подписи и Sig2 использует новый алгоритм. Для предварительной мягкой вилки узлов Sig2 всего бесполезные данные и ничего не делает, но после мягкой вилки узлов, если Sig2 недействительна сделка не удается.