Got 64: non-mandatory-script-verify-flag (Signature must be zero for failed CHECK(MULTI)SIG operation) when submitting segwit transaction

3

1

I got the above error when submitting this transaction:

010000000001013894a4bdcfa20ef5a6cbfe1d22c5fe5041eab586a5ea2b044f969a02dab6b3d200000000171600141a982a7d2712fc33d47c990cd8cde15c87ca2e07ffffffff015e3f01000000000017a914fb2dc3b4dd0731c8f2559506c7d0cb876b0e71298702483045022100c68dac735a3529d84fdbfc3a8a11d313d59a9791b046fc39bbfc55db71d6d2010220028f2bbfba78c393858e3cb7ad51e24e8dfd2260d4a3cbbf8feb4d4c6005967701210371b63ebaa78a70420bc36159bed610b8f788e9a7b953558f06bb40622d9cbfe400000000

A previous transaction from the same P2SH-P2WPKH address was successfully spent but I got this error whenever I try to spend this transaction:

d2b3b6da029a964f042beaa586b5ea4150fec5221dfecba6f50ea2cfbda49438

I already attempted to sign the transaction again a few time but still got the same error.

user3779267

Posted 2017-10-21T04:26:04.263

Reputation: 41

1How did you create this transaction? What commands did you use? What software?Andrew Chow 2017-10-21T05:08:19.783

I used the ruby gem to build and sign this transactionuser3779267 2017-10-30T06:16:16.220

1I found out it was because of a precision error in our code. The amount that used to build the input segwit transaction is incorrect leading to this error.user3779267 2017-10-30T07:00:31.973

1Please write an answer to your own question if you found a solution.Pieter Wuille 2017-11-20T18:53:04.780

Answers

1

When I try to submit that transaction I don't get that error message. To me it looks like you are only sending 1 satoshi as transaction fee in total. Try to send it with a higher fee.

Bjarne

Posted 2017-10-21T04:26:04.263

Reputation: 752

1

I found out it was because of a precision error in our code. The amount that used to build the input segwit transaction is incorrect leading to this error.

user3779267

Posted 2017-10-21T04:26:04.263

Reputation: 41

1

You will receive this error if the value you are signing is not the exact amount of the entire unspent output value.

For example, if your unspent output value is 35,000, and you only want to send 30,000, your output value would be 30,000, and your signing amount would be 35,000. If you sign for only 30,000 (not the full amount of the unspent output) you will receive this error.

Visual Example Using 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

m1xolyd1an

Posted 2017-10-21T04:26:04.263

Reputation: 3 356

I've faced the same error and it is very confusing. I'm sure that in my case sign gets exact full amount of input, because I walk through UTXOs and pass utxo[i].satoshis as amount. Can anything else cause this error?oxfn 2018-05-09T10:21:14.387

I'm using bgoldjs-lib - fork of bitcoinjs-lib for BTGoxfn 2018-05-09T10:56:27.537

0

I got the same error when create transaction via bgoldjs-lib. Say that it's confusing like say nothing. I'd no problem with bitcore-lib, bitcoincashjs to create BTC, BCH, LTC txs. Think it's open source !^_^! or I've not so deep learning in this area. I found one solution https://github.com/Ayms/bitcoin-transactions. There're tx.js script, but in min.js format. It's created success broadcasted txs for me. There're one unsuitable output that i'm going to remove in a near time.

Nick Borodin

Posted 2017-10-21T04:26:04.263

Reputation: 1