У меня складывается впечатление, что текущая реализация Bitcoin в с тех пор переехала, но мне любопытно, о первоначальной цели за OP_CODESEPARATOR опкода.
В более общем плане, есть форум или документ, в котором ранние проектные решения, как это обсуждается? (Я понимаю, что это маловероятно, но это только возможно, я пропустил это и было бы так полезно иметь.)
Это большой вопрос. К сожалению, единственный дизайнерский документ для Bitcoin является бумага, написанная Satoshi. Она охватывает основной дизайн, но даже не упоминает о сценарии или контракты. Все, что мы знаем об этой системе фактически было "переоткрыл", Сатоси дал мне краткое руководство в разработке контрактов, прежде чем он ушел, а остальное я понял сам.
Я провел некоторое время, несколько месяцев назад, пытаясь выяснить OP_CODESEPARATOR. Его определение ясно, но я не смог найти каких-либо ситуаций, в которых было бы полезно, и я в конечном итоге интересно, если это было на самом деле неправильно спроектированный. Мы знаем, что есть ошибки в системе сценариев, предполагающие части кода было написано, никогда не будучи на самом деле испытания.
Рассуждения следующим образом. Есть, очевидно, два места, которые вы можете использовать OP_CODESEPARATOR. Одним из них является scriptSig, а другой scriptPubKey. Там нет никакого смысла в основном положить ничего, кроме блоков данных в scriptSig, потому что она оценена без чего-либо в качестве входных данных, поэтому, все, что ставится всегда может быть статически оценены. Исключение, если вы найдете способ, чтобы представить результат более компактно и, следовательно, нужно более низкую плату, но с логической точки зрения это может также содержать только данные.
Это оставляет scriptPubKey. Положив OP_CODESEPARATOR здесь позволяет создавать "пустое место" которые подпись не покроет. Это полезно, если вы можете изменить содержимое этого пустого пространства после того, как подпись создается. Но вы не можете, потому что подпись всегда охватывает структуру COutPoint, то есть, она содержит хэш подключенной сделки, таким образом, вы косвенно подписывая содержимое этого пустого пространства независимо от наличия кодового сепаратора или нет. Изменение, что происходит до того, как разделитель изменяет ТЙ хэш и, таким образом, нарушает любые подписи на сделках, которые пытались провести этот вывод.
Вполне возможно, что я что-то пропустил и есть способ, чтобы использовать его пока не могу видеть. Но непрямое подписание вещь кажется довольно ясной. Там нет никакого способа, чтобы подписать расходы по сделке, которая впоследствии меняется. Если бы не было, не было бы способы использования этой функции.
Как бы это работать? Акт вставки SIGA или СИГБА изменяет хэш транзакции, содержащую выход, недействительности другой подписи.
Я не могу видеть, как OP_CODESEPARATOR можно использовать либо. Я соблазн предположить, что какая-либо операция с использованием его следует «обескуражен» (у шахтеров отказываются строить на блоках, которые содержат операции с использованием его).
хэши сделка может быть другой, отдельный разговор topic-- я думал, что хэши способ сделки рассчитаны б / у можно было бы улучшить, хотя я не думаю, что это критический недостаток дизайна, но в категории "вещи, которые мы можем жить с, но это, возможно, могло бы быть сделано лучше",
Как бы это работать? Акт вставки SIGA или СИГБА изменяет хэш транзакции, содержащую выход, недействительности другой подписи.
Я думал, через а "полный" каскадный сценарий, но я обнаружил, что pbegincodehash не сохраняется между scriptSig и scriptPubKey, так что такие вещи не будет работать.
Оказывает две команды checksig / checkmultisig в том же сценарии на самом деле даже проблема? Я теперь думаю, что, может быть, scriptSigs не является даже частью сига хэш, который позволит устранить эту проблему полностью.
Re: Какая цель была OP_CODESEPARATOR предназначено для?
Я не думаю, что мы должны препятствовать его. Вполне возможно, что-то нам не хватает, и использование может быть обнаружено в будущем. Протокол Bitcoin полна тонкостей, которые не сразу бросаются в глаза. Это не кажется вредным и было бы "обескураженный" проверки IsStandard в любом случае.
Способ обозначения сделки, которая не использует его хэш может быть полезно для некоторых протоколов, но я думаю, что нарушило бы все виды инвариантов и сделать кодовая намного сложнее. Вполне вероятно, что все, что сначала выглядит, как он нуждается в этом, может быть изменено, чтобы не нужно.
Оказывает две команды checksig / checkmultisig в том же сценарии на самом деле даже проблема? Я теперь думаю, что, может быть, scriptSigs не является даже частью сига хэш, который позволит устранить эту проблему полностью.
Это не проблема, пока подписи всегда в scriptSig и никогда в scriptPubKey.
Некоторое время я думал, в том числе подписи на выходе может позволить вам сделать некоторые аккуратные вещи, как ограничение формы сделки расходов, но она не может работать - подпись вычисляется в контексте транзакции расходов и, таким образом, всегда признаки через хэш подсоединенной сделки, которая является то, что вам нужно вставить подпись в. Подписи не могут подписывать сами.
Система сценариев является гибкой, но не столь гибки, как это может показаться на первый взгляд - scriptPubKeys не может содержать подписи, и в то время как scriptSigs разрешено содержать код есть (насколько я могу судить) нет смысла в этом. Это на самом деле в первую очередь предназначено для размещения подписей.
Было бы здорово, если бы OP_CHECKSIG позволило подписи над произвольными данными, а не требовать, чтобы это было транзакционные хэши. Однако это не представляется возможным.