Несколько часов назад я отправил транзакцию, которая не добавляется в блок, и на blockchain.info она помечена как «нестандартный ввод».
Я использовал pybitcointools для создания TX.
Что не так с ТХ?
Я считаю, что это нестандартно, потому что вы включаете код OP в свой входной скрипт, в частности, OP_FALSE
. Нет необходимости включать коды OP во входные скрипты; только литералы. Единственный способ, которым входные сценарии (scriptSig) взаимодействуют с выходными сценариями, которые они тратят (scriptPubKey), — это размещение значений в стеке. Следовательно, нет необходимости запускать операцию, поскольку вы можете просто поместить значения в стек.
Из документов для OP_FALSE
:
Пустой массив байтов помещается в стек. (Это не пустая операция: элемент добавляется в стек.)
Потому что в вашем скрипте есть операция, а не просто литералы, она нестандартна.
Тем не менее, я не уверен, как написать сценарий ввода, который помещает пустой массив байтов в стек без использования OP_FALSE
. Я не знаю, зачем такая вещь была бы необходима для погашения выхода.
РЕДАКТИРОВАТЬ: я только что понял, что вы используете стандартный сценарий ввода Multisig (который, как я забыл, является исключением из правила «нет кодов операций во входных сценариях»), чтобы выкупить стандартный сценарий вывода P2SH. Технически ваш сценарий погашения является стандартным, поскольку он соответствует одной из стандартных транзакций , но не соответствует сценарию вывода, который он тратит. Ваш сценарий погашения, вероятно, должен быть в форме, <sig> [sig] [sig...] <redeemScript>
если он собирается потратить выходной сценарий, который выглядит как OP_HASH160 <Hash160(redeemScript)> OP_EQUAL
.
возможны 4 причины bad-txns-nonstandard-inputs
ошибки:
subscript.GetSigOpCount(true) > MAX_P2SH_SIGOPS
тест не проходит .Вы можете найти проверки src/policy/policy.cpp
и сделать журнал более подробным, применив этот патч .
Я обнаружил это, пытаясь собрать около 0,6 BTC из 182 транзакций, чей скрипт при компиляции на самом деле пишется как «сценарий». вот образец . Я подозреваю, что это была программная ошибка со стороны майнера: ошибка в размере 6000 долларов США+, о которой он сейчас, скорее всего, сожалеет.
амаклин
возродить
возродить