Litecoin - obligatorio-script-verify-flag-failed (La firma debe ser cero para la operación fallida CHECK(MULTI)SIG)

Tengo manualmente una transacción sin procesar usando la biblioteca de bits para enviar una transacción usando la red de prueba de Litecoin. Después de ajustar las tarifas y otras variables de la red, recibí el siguiente error que se indica en el asunto de la publicación. Esta transacción no es multifirma. Este es el valor hexadecimal de la transacción sin procesar

0100000001d0e0112dd6bf2b44c44895d5363f2d2b940d4aff8d7fc2852a4c751e90200a5e000000006b483045022100ac91b8da716668553088da2da32c596a03973fffcbc36d2a7f3ecb8e93c3de07022040b7015c065e74d6f5fc30c9458c0631ddfb2d72feae3bb699c6ce835cd0ba54012102d41b76393d5f82b1856343623974684ff2bf03b26ec6bc2d0391ae0768cd9ebdffffffff0200286bee000000001976a914df918d7a0efe546d0284e217a3a322bb09f37f3988acb0a69a3b000000001976a914f2ebf3c5642abf069b4197a08e116937503d13e488ac00000000

Después de decodificar este hexadecimal, este es el resultado:

{
  "txid": "2915435fbfb199670280d564b948d5a52fb4002f238f2980effef10818a84fc5",
  "hash": "2915435fbfb199670280d564b948d5a52fb4002f238f2980effef10818a84fc5",
  "version": 1,
  "size": 226,
  "vsize": 226,
  "locktime": 0,
  "vin": [
    {
      "txid": "5e0a20901e754c2a85c27f8dff4a0d942b2d3f36d59548c4442bbfd62d11e0d0",
      "vout": 0,
      "scriptSig": {
        "asm": "3045022100ac91b8da716668553088da2da32c596a03973fffcbc36d2a7f3ecb8e93c3de07022040b7015c065e74d6f5fc30c9458c0631ddfb2d72feae3bb699c6ce835cd0ba54[ALL] 02d41b76393d5f82b1856343623974684ff2bf03b26ec6bc2d0391ae0768cd9ebd",
        "hex": "483045022100ac91b8da716668553088da2da32c596a03973fffcbc36d2a7f3ecb8e93c3de07022040b7015c065e74d6f5fc30c9458c0631ddfb2d72feae3bb699c6ce835cd0ba54012102d41b76393d5f82b1856343623974684ff2bf03b26ec6bc2d0391ae0768cd9ebd"
      },
      "sequence": 4294967295
    }
  ],
  "vout": [
    {
      "value": 40.00000000,
      "n": 0,
      "scriptPubKey": {
        "asm": "OP_DUP OP_HASH160 df918d7a0efe546d0284e217a3a322bb09f37f39 OP_EQUALVERIFY OP_CHECKSIG",
        "hex": "76a914df918d7a0efe546d0284e217a3a322bb09f37f3988ac",
        "reqSigs": 1,
        "type": "pubkeyhash",
        "addresses": [
          "n1u5M1NRi1VGDrAQujjzaRhRsfWBtvsVLA"
        ]
      }
    }, 
    {
      "value": 9.99990960,
      "n": 1,
      "scriptPubKey": {
        "asm": "OP_DUP OP_HASH160 f2ebf3c5642abf069b4197a08e116937503d13e4 OP_EQUALVERIFY OP_CHECKSIG",
        "hex": "76a914f2ebf3c5642abf069b4197a08e116937503d13e488ac",
        "reqSigs": 1,
        "type": "pubkeyhash",
        "addresses": [
          "n3fQUj2SSLcuAQjeL97WWuLm3n5DvjNYA8"
        ]
      }
    }
  ]
}

¡Gracias de antemano! :)

Respuestas (1)

No estoy 100% seguro, si esto también se aplica a Litecoin, ya que es un clon de Bitcoin. Pero entiendo que el esquema de firma es el mismo... Entonces debería ser posible usar openssl o cualquier biblioteca ECDSA para verificar la firma. Por lo tanto, se debe crear el mar doble del tx sin firmar, según estos pasos de la respuesta de amaclin :

1) Eliminar el script de entrada de la transacción

2) Reemplácelo con el pubkeyscript del TX anterior

3) Añadir SIGHASH_ALL

4) Hash dos veces con SHA256

Intento reproducirlo y obtengo estos valores:

sig:         3045022100ac91b8da716668553088da2da32c596a03973fffcbc36d2a7f3ecb8e93c3de07022040b7015c065e74d6f5fc30c9458c0631ddfb2d72feae3bb699c6ce835cd0ba54 
pubkey:      02d41b76393d5f82b1856343623974684ff2bf03b26ec6bc2d0391ae0768cd9ebd 
double hash: c54fa81808f1feef80298f232f00b42fa5d548b964d580026799b1bf5f431529

Esto devuelve un error en la verificación de la firma. Esto puede tener varias causas principales... Dijiste, "después de ajustar las tarifas y otras variables de red": las tarifas están relacionadas con los montos en la estructura de salida y están firmadas. En cualquier momento que se cambie algo del tx firmado, se invalida la firma. Esta podría ser la causa raíz... ¿Podemos ver la transacción sin firmar?