Browse Source

Merge #8118: Reduce unnecessary hashing in signrawtransaction

bd0f413 Reduce unnecessary hashing in signrawtransaction (Jonas Nick)
0.13
Wladimir J. van der Laan 9 years ago
parent
commit
9b6a48c2e9
No known key found for this signature in database
GPG Key ID: 74810B012346C9A6
  1. 7
      src/rpc/rawtransaction.cpp

7
src/rpc/rawtransaction.cpp

@ -743,6 +743,9 @@ UniValue signrawtransaction(const UniValue& params, bool fHelp) @@ -743,6 +743,9 @@ UniValue signrawtransaction(const UniValue& params, bool fHelp)
// Script verification errors
UniValue vErrors(UniValue::VARR);
// Use CTransaction for the constant parts of the
// transaction to avoid rehashing.
const CTransaction txConst(mergedTx);
// Sign what we can:
for (unsigned int i = 0; i < mergedTx.vin.size(); i++) {
CTxIn& txin = mergedTx.vin[i];
@ -760,10 +763,10 @@ UniValue signrawtransaction(const UniValue& params, bool fHelp) @@ -760,10 +763,10 @@ UniValue signrawtransaction(const UniValue& params, bool fHelp)
// ... and merge in other signatures:
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;
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));
}
}

Loading…
Cancel
Save