Hace unas horas, envié una transacción que no se agrega a un bloque, y en blockchain.info se marcó como "entrada no estándar".
He usado pybitcointools para crear el TX.
¿Qué le pasa al TX?
Creo que no es estándar porque incluye un código OP en su secuencia de comandos de entrada, específicamente, OP_FALSE
. No debería ser necesario incluir códigos OP en los scripts de entrada; solo literales. La única forma en que los scripts de entrada (scriptSig) interactúan con los scripts de salida que están gastando (scriptPubKey) es colocando valores en la pila. Por lo tanto, nunca hay necesidad de ejecutar una operación, ya que simplemente puede colocar los valores en la pila.
De los documentos para OP_FALSE
:
Una matriz vacía de bytes se inserta en la pila. (Esto no es un no-op: se agrega un elemento a la pila).
Debido a que hay una operación y no solo literales en su secuencia de comandos, no es estándar.
Dicho esto, no estoy seguro de cómo escribir un script de entrada que coloque una matriz vacía de bytes en la pila sin usar OP_FALSE
. No sé por qué tal cosa sería necesaria para canjear una salida.
EDITAR: Me acabo de dar cuenta de que está utilizando un script de entrada Multisig estándar (que olvidé que es una excepción a la regla "sin códigos de operación en los scripts de entrada") para canjear un script de salida P2SH estándar. Técnicamente, su secuencia de comandos de canje es estándar, porque coincide con una de las transacciones estándar , pero no coincide con la secuencia de comandos de salida que está gastando. Su secuencia de comandos de canje probablemente debería tener la forma de <sig> [sig] [sig...] <redeemScript>
si va a gastar una secuencia de comandos de salida que se parece a OP_HASH160 <Hash160(redeemScript)> OP_EQUAL
.
Hay 4 posibles razones para el bad-txns-nonstandard-inputs
error:
subscript.GetSigOpCount(true) > MAX_P2SH_SIGOPS
prueba falla.puede encontrar los controles src/policy/policy.cpp
y hacer que registre más detalladamente las razones aplicando este parche .
Descubrí esto mientras intentaba recolectar alrededor de .6 BTC de las 182 transacciones cuyo script en realidad, cuando se compila, deletrea "script". aquí hay una muestra Sospecho que fue un error de programación por parte del minero: un error de USD6000+ del que ahora muy probablemente se arrepiente.
amaclin
revivido
revivido