Transactions

Got 64: non-mandatory-script-verify-flag (簽名必須為零,失敗的 CHECK(MULTI)SIG 操作) 送出 segwit 交易時

  • December 3, 2019

送出此交易時出現上述錯誤:

010000000001013894a4bdcfa20ef5a6cbfe1d22c5fe5041eab586a5ea2b044f969a02dab6b3d200000000171600141a982a7d2712fc33d47c990cd8cde15c87ca2e07ffffffff015e3f01000000000017a914fb2dc3b4dd0731c8f2559506c7d0cb876b0e71298702483045022100c68dac735a3529d84fdbfc3a8a11d313d59a9791b046fc39bbfc55db71d6d2010220028f2bbfba78c393858e3cb7ad51e24e8dfd2260d4a3cbbf8feb4d4c6005967701210371b63ebaa78a70420bc36159bed610b8f788e9a7b953558f06bb40622d9cbfe400000000

來自同一 P2SH-P2WPKH 地址的先前交易已成功使用,但每當我嘗試使用此交易時,都會出現此錯誤:

d2b3b6da029a964f042beaa586b5ea4150fec5221dfecba6f50ea2cfbda49438

我已經嘗試過幾次再次簽署交易,但仍然遇到同樣的錯誤。

如果您要簽名的值不是整個未使用輸出值的確切數量,您將收到此錯誤。

例如,如果你的未使用輸出值為 35,000,而你只想發送 30,000,那麼你的輸出值為 30,000,你的簽名金額為 35,000。如果您僅簽署 30,000(不是未使用輸出的全部金額),您將收到此錯誤。

使用 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

當我嘗試送出該交易時,我沒有收到該錯誤消息。在我看來,您總共只發送了 1 個聰作為交易費。嘗試以更高的費用發送它。

引用自:https://bitcoin.stackexchange.com/questions/61030