"mandatory-script-verify-flag-failed (la firma debe ser cero para la operación fallida de verificación (multi)sig)"

Bifurqué openwallet-android para poder agregar mi moneda - (marcadores de posición) placeh.io.

El openwallet-android se conecta al servidor electrumx. Puedo hacer que mi cadena se cargue correctamente en el servidor electrumx. La billetera abierta lee correctamente el saldo de la dirección/entradas y puede ver su saldo a través de la billetera.

Sin embargo, cuando intento transmitir una transacción, recibo el mensaje:

"mandatory-script-verify-flag-failed (signature must be zero for failed check(multi)sig operation)"

Desde la red placehd/placeh.

Aquí hay información adicional, esta es la transacción sin procesar que se está publicando. Si trato de enviar la transacción sin procesar en el cliente placeh-cli, no tendrá éxito y produce el mismo error cuando se hace manualmente

Transacción sin procesar:

placeh-cli decoderawtransaction 

01000000017477f59250a8d8a7d94ba5dcc196222c0b6c92849cad210735b4380b24c03b13010000006a473044022053b17723e8a90846fc341006f5f63d5776df619f33cec82d8065e836508672c6022036298087c2f37c3002c4897b74e7de6af8c608c89cbcef07ada9c5551c85f2810121031dc78b8c254649e204b81641f70497980ca6b5574f837001c962930580d1372dffffffff02c00e1602000000001976a914a117ed0f4e2afe1e1b8d2b0253408a7830f2b55688ac0093e651020000001976a914c472af380586ed1638686731cc1eda3c60363ec788ac00000000
{
  "txid": "de045f2220d0b9f34060336c9ed3badc7c22741fec3aa1d87ff24264c3c1fb5e",
  "hash": "de045f2220d0b9f34060336c9ed3badc7c22741fec3aa1d87ff24264c3c1fb5e",
  "version": 1,
  "size": 225,
  "vsize": 225,
  "locktime": 0,
  "vin": [
    {
      "txid": "133bc0240b38b4350721ad9c84926c0b2c2296c1dca54bd9a7d8a85092f57774",
      "vout": 1,
      "scriptSig": {
        "asm": "3044022053b17723e8a90846fc341006f5f63d5776df619f33cec82d8065e836508672c6022036298087c2f37c3002c4897b74e7de6af8c608c89cbcef07ada9c5551c85f281[ALL] 031dc78b8c254649e204b81641f70497980ca6b5574f837001c962930580d1372d",
        "hex": "473044022053b17723e8a90846fc341006f5f63d5776df619f33cec82d8065e836508672c6022036298087c2f37c3002c4897b74e7de6af8c608c89cbcef07ada9c5551c85f2810121031dc78b8c254649e204b81641f70497980ca6b5574f837001c962930580d1372d"
      },
      "sequence": 4294967295
    }
  ],
  "vout": [
    {
      "value": 0.35000000,
      "n": 0,
      "scriptPubKey": {
        "asm": "OP_DUP OP_HASH160 a117ed0f4e2afe1e1b8d2b0253408a7830f2b556 OP_EQUALVERIFY OP_CHECKSIG",
        "hex": "76a914a117ed0f4e2afe1e1b8d2b0253408a7830f2b55688ac",
        "reqSigs": 1,
        "type": "pubkeyhash",
        "addresses": [
          "FLWtv6SuocTFMozTZvdZAhroJLehVjLKhs"
        ]
      }
    },
    {
      "value": 99.64000000,
      "n": 1,
      "scriptPubKey": {
        "asm": "OP_DUP OP_HASH160 c472af380586ed1638686731cc1eda3c60363ec7 OP_EQUALVERIFY OP_CHECKSIG",
        "hex": "76a914c472af380586ed1638686731cc1eda3c60363ec788ac",
        "reqSigs": 1,
        "type": "pubkeyhash",
        "addresses": [
          "FPjqHpEzdYAbxVG2acxz8GWGAPmJsWj6oP"
        ]
      }
    }
  ]
}

Creo que esto puede tener algo que ver con la forma en que openwallet construye la transacción sin procesar. Me gustaría actualizar las bibliotecas para que pueda transmitir la transacción correctamente.

Esto significa que la firma no era válida, tal vez la firma no se creó correctamente, tal vez los datos de la transacción que está firmando no coinciden o las claves privadas utilizadas no pueden gastar la salida anterior.
JBaczuk: ¿Tiene alguna sugerencia sobre cómo podría solucionar este problema? Las transacciones creadas y firmadas en placeh-qt parecen funcionar bien.
Sin (a) el resultado de la transacción gastado y (b) las reglas de consenso de su altcoin, no hay forma de responder a esto.
Gracias Pieter, publiqué la fuente de altcoin aquí, es una bifurcación "bastante reciente" del núcleo de bitcoin. github.com/xagau/placeh
Su firma real es válida (al menos según mi secuencia de comandos de bitcoin vm). Quizás te estés encontrando con algo similar a esto . ¿Estás seguro de que openwallet está manejando las cantidades correctamente al firmar?
@RaghavSood, ¿dónde está obteniendo el scriptPubKey de entrada para validarlo?
Raghav, no estoy seguro. No sé cuánto tiempo hace que openwallet se "actualizó realmente", pero parece funcionar con Bitcoin, aunque no le he enviado ningún bitcoin real para probarlo. La bifurcación de openwallet ha terminado en github.com/xagau/openwallet-android . Desafortunadamente, tengo que resolver este problema básico de plomería antes de que pueda intentar construir encima y está un poco fuera de mi alcance. Vi comentarios sobre los montos de los votos que tienen que sumar un monto exacto, incluida la tarifa, pero no estoy seguro.
@JBaczuk Simplemente decodifiqué la dirección del explorador vinculado en el sitio de la moneda para obtener el HASH160 ( 40840b34365502f6fa5f066b137cf5081b7be8f8), luego agregué los códigos de operación para obtener 76a91440840b34365502f6fa5f066b137cf5081b7be8f888ac, que es un script p2pkh estándar
@xagau Sus cantidades en decoderrawtransaction parecen correctas. Es posible que los montos no se tomen correctamente durante el proceso de firma, por lo que los montos en su vout en el tx sin procesar difieren de lo que se firmó. Sin embargo, esto es pura especulación, basada solo en el hecho de que hay un problema abierto en el núcleo de bitcoin, y que la firma en sí es válida.
@RaghavSood gracias y gracias a Pieter, JBaczuk, esto me da un lugar donde buscar. Si encuentro una solución, puedo modificar este hilo y agregar un comentario al problema abierto en el núcleo de bitcoin. ¡Gracias!
@PieterWuille, RaghavSood, JBaczuk: Descubrí cuál era el problema aquí, como referencia. Tuve que hacer una transacción signraw para que "funcione". Parece que algo sobre el procedimiento de firma del cliente (openwallet-android) rechazó el proceso de firma en 0.12 bitcoin. Después de firmar la transacción sin procesar con el último cliente de altcoin, pude crear una transacción "hexadecimal" firmada que fue aceptada por la red.

Respuestas (1)

Después de algunas investigaciones adicionales e información útil que encontré aquí, pude concluir lo siguiente:

Las transacciones codificadas en 0.12.X bitcoin y luego transmitidas en 0.15 bitcoin pueden encontrar "mandatory-script-verify-flag-failed (la firma debe ser cero para la operación fallida de verificación (multi)sig)"

Este problema se puede resolver haciendo lo siguiente: Firmando su transacción sin formato 0.12.X con una firma 0.15. No puedo identificar el problema exacto, sin embargo, pude codificar la transacción sin procesar en 0.12.X y firmarla en 0.15 y transmitirla con éxito. Esta información puede ser útil si alguien está tratando de averiguar qué partes de su proceso de firma deben refactorizarse/actualizarse.