Transacción marcada como que tiene una entrada no estándar

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?

¿Dónde ves "entrada no estándar"?
@amaclin había un signo de exclamación/advertencia en la pantalla, estaba a punto de tomar una captura de pantalla pero finalmente se confirmó la transacción
Finalmente, la transacción se confirmó en el bloque blockchain.info/block-index/1114778 ¡Gracias por sus respuestas/comentarios!

Respuestas (2)

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.

OP_CHECKMULTISIG extrae un elemento demasiado de la pila, lo que requiere que scriptSig contenga un impulso adicional.
Sí, acabo de leer sobre eso. Se siente como una peculiaridad extraña, pero entiendo cómo estamos atascados con eso. Menos mal que P2SH está haciendo que ese tema sea menos relevante.

Hay 4 posibles razones para el bad-txns-nonstandard-inputserror:

  1. el script de salida de la transacción anterior falla en la verificación de Solver().
  2. el script de canje que hizo para ese script de salida falla en una verificación de EvalScript().
  3. la pila está vacía después de la ejecución anterior de EvalScript().
  4. la subscript.GetSigOpCount(true) > MAX_P2SH_SIGOPSprueba falla.

puede encontrar los controles src/policy/policy.cppy 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.