|
|
@ -743,6 +743,9 @@ UniValue signrawtransaction(const UniValue& params, bool fHelp) |
|
|
|
// Script verification errors
|
|
|
|
// Script verification errors
|
|
|
|
UniValue vErrors(UniValue::VARR); |
|
|
|
UniValue vErrors(UniValue::VARR); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Use CTransaction for the constant parts of the
|
|
|
|
|
|
|
|
// transaction to avoid rehashing.
|
|
|
|
|
|
|
|
const CTransaction txConst(mergedTx); |
|
|
|
// Sign what we can:
|
|
|
|
// Sign what we can:
|
|
|
|
for (unsigned int i = 0; i < mergedTx.vin.size(); i++) { |
|
|
|
for (unsigned int i = 0; i < mergedTx.vin.size(); i++) { |
|
|
|
CTxIn& txin = mergedTx.vin[i]; |
|
|
|
CTxIn& txin = mergedTx.vin[i]; |
|
|
@ -760,10 +763,10 @@ UniValue signrawtransaction(const UniValue& params, bool fHelp) |
|
|
|
|
|
|
|
|
|
|
|
// ... and merge in other signatures:
|
|
|
|
// ... and merge in other signatures:
|
|
|
|
BOOST_FOREACH(const CMutableTransaction& txv, txVariants) { |
|
|
|
BOOST_FOREACH(const CMutableTransaction& txv, txVariants) { |
|
|
|
txin.scriptSig = CombineSignatures(prevPubKey, mergedTx, i, txin.scriptSig, txv.vin[i].scriptSig); |
|
|
|
txin.scriptSig = CombineSignatures(prevPubKey, txConst, i, txin.scriptSig, txv.vin[i].scriptSig); |
|
|
|
} |
|
|
|
} |
|
|
|
ScriptError serror = SCRIPT_ERR_OK; |
|
|
|
ScriptError serror = SCRIPT_ERR_OK; |
|
|
|
if (!VerifyScript(txin.scriptSig, prevPubKey, STANDARD_SCRIPT_VERIFY_FLAGS, MutableTransactionSignatureChecker(&mergedTx, i), &serror)) { |
|
|
|
if (!VerifyScript(txin.scriptSig, prevPubKey, STANDARD_SCRIPT_VERIFY_FLAGS, TransactionSignatureChecker(&txConst, i), &serror)) { |
|
|
|
TxInErrorToJSON(txin, vErrors, ScriptErrorString(serror)); |
|
|
|
TxInErrorToJSON(txin, vErrors, ScriptErrorString(serror)); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|