mirror of
https://github.com/kvazar-network/kevacoin.git
synced 2025-01-11 15:48:05 +00:00
Correctly handle missing inputs in signrawtransaction. Fixes #1654.
Signrawtransaction rpc was crashing when some inputs were unknown, and even with that fixed was failing to handle all the known inputs if there were unknown inputs in front of them. This commit instead attempts to fetch inputs one at a time.
This commit is contained in:
parent
dd199d0ebd
commit
3557f99cf5
@ -321,18 +321,23 @@ Value signrawtransaction(const Array& params, bool fHelp)
|
|||||||
|
|
||||||
// Fetch previous transactions (inputs):
|
// Fetch previous transactions (inputs):
|
||||||
map<COutPoint, CScript> mapPrevOut;
|
map<COutPoint, CScript> mapPrevOut;
|
||||||
|
for (unsigned int i = 0; i < mergedTx.vin.size(); i++)
|
||||||
{
|
{
|
||||||
|
CTransaction tempTx;
|
||||||
MapPrevTx mapPrevTx;
|
MapPrevTx mapPrevTx;
|
||||||
CTxDB txdb("r");
|
CTxDB txdb("r");
|
||||||
map<uint256, CTxIndex> unused;
|
map<uint256, CTxIndex> unused;
|
||||||
bool fInvalid;
|
bool fInvalid;
|
||||||
mergedTx.FetchInputs(txdb, unused, false, false, mapPrevTx, fInvalid);
|
|
||||||
|
// FetchInputs aborts on failure, so we go one at a time.
|
||||||
|
tempTx.vin.push_back(mergedTx.vin[i]);
|
||||||
|
tempTx.FetchInputs(txdb, unused, false, false, mapPrevTx, fInvalid);
|
||||||
|
|
||||||
// Copy results into mapPrevOut:
|
// Copy results into mapPrevOut:
|
||||||
BOOST_FOREACH(const CTxIn& txin, mergedTx.vin)
|
BOOST_FOREACH(const CTxIn& txin, tempTx.vin)
|
||||||
{
|
{
|
||||||
const uint256& prevHash = txin.prevout.hash;
|
const uint256& prevHash = txin.prevout.hash;
|
||||||
if (mapPrevTx.count(prevHash))
|
if (mapPrevTx.count(prevHash) && mapPrevTx[prevHash].second.vout.size()>txin.prevout.n)
|
||||||
mapPrevOut[txin.prevout] = mapPrevTx[prevHash].second.vout[txin.prevout.n].scriptPubKey;
|
mapPrevOut[txin.prevout] = mapPrevTx[prevHash].second.vout[txin.prevout.n].scriptPubKey;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user