Obtuve 64: bandera de verificación de secuencia de comandos no obligatoria (la firma debe ser cero para la operación CHECK(MULTI)SIG fallida) al enviar la transacción segwit

Recibí el error anterior al enviar esta transacción:

010000000001013894a4bdcfa20ef5a6cbfe1d22c5fe5041eab586a5ea2b044f969a02dab6b3d200000000171600141a982a7d2712fc33d47c990cd8cde15c87ca2e07ffffffff015e3f01000000000017a914fb2dc3b4dd0731c8f2559506c7d0cb876b0e71298702483045022100c68dac735a3529d84fdbfc3a8a11d313d59a9791b046fc39bbfc55db71d6d2010220028f2bbfba78c393858e3cb7ad51e24e8dfd2260d4a3cbbf8feb4d4c6005967701210371b63ebaa78a70420bc36159bed610b8f788e9a7b953558f06bb40622d9cbfe400000000

Una transacción anterior de la misma dirección P2SH-P2WPKH se gastó con éxito, pero recibí este error cada vez que intento gastar esta transacción:

d2b3b6da029a964f042beaa586b5ea4150fec5221dfecba6f50ea2cfbda49438

Ya intenté volver a firmar la transacción varias veces, pero sigo teniendo el mismo error.

¿Cómo creaste esta transacción? ¿Qué comandos usaste? ¿Qué programa?
Usé la gema de rubí para construir y firmar esta transacción.
Descubrí que era por un error de precisión en nuestro código. La cantidad que se usó para crear la transacción de segwit de entrada es incorrecta, lo que genera este error.
Escriba una respuesta a su propia pregunta si encontró una solución.

Respuestas (5)

Recibirá este error si el valor que está firmando no es la cantidad exacta del valor total de salida no gastado.

Por ejemplo, si su valor de salida no gastado es 35 000 y solo desea enviar 30 000, su valor de salida sería 30 000 y su monto de firma sería 35 000. Si firma por solo 30 000 (no el monto total de la producción no gastada), recibirá este error.

Ejemplo visual usando BitcoinJS:

//add input
txb.addInput(txid, outn, null, scriptPubkey);

//add output
txb.addOutput(receivingAddress, 30000); //amount less the mining fee

//signing
txb.sign(0, keypair, null, null, 35000); //NOTE the amount is the FULL amount of the unspent output, NOT the amount being sent
Me he enfrentado al mismo error y es muy confuso. Estoy seguro de que en mi caso signobtiene la cantidad total exacta de entrada, porque camino a través de UTXO y paso utxo[i].satoshiscomo amount. ¿Puede algo más causar este error?
Estoy usando bgoldjs-lib- horquilla de bitcoinjs-libBTG

Recibí este error no solo al especificar una cantidad de entrada incorrecta, como se menciona en otra parte de este hilo, sino también al ordenar las firmas incorrectamente en una transacción multisig.

Cuando intento enviar esa transacción, no recibo ese mensaje de error. Para mí, parece que solo está enviando 1 satoshi como tarifa de transacción en total. Intenta enviarlo con una tarifa más alta.

Descubrí que era por un error de precisión en nuestro código. La cantidad que se usó para crear la transacción de segwit de entrada es incorrecta, lo que genera este error.

Recibí el mismo error al crear una transacción a través de bgoldjs-lib. Di que es confuso como no decir nada. No tendría ningún problema con bitcore-lib, bitcoincashjs para crear BTC, BCH, LTC txs. ¡Piensa que es de código abierto!^_^! o no tengo un aprendizaje tan profundo en esta área. Encontré una solución https://github.com/Ayms/bitcoin-transactions . Hay un script tx.js, pero en formato min.js. Ha creado txs transmitidos con éxito para mí. Hay una salida inadecuada que voy a eliminar en breve.