|
|
|
@ -297,7 +297,7 @@ bool CWallet::Unlock(const SecureString& strWalletPassphrase)
@@ -297,7 +297,7 @@ bool CWallet::Unlock(const SecureString& strWalletPassphrase)
|
|
|
|
|
|
|
|
|
|
{ |
|
|
|
|
LOCK(cs_wallet); |
|
|
|
|
BOOST_FOREACH(const MasterKeyMap::value_type& pMasterKey, mapMasterKeys) |
|
|
|
|
for (const MasterKeyMap::value_type& pMasterKey : mapMasterKeys) |
|
|
|
|
{ |
|
|
|
|
if(!crypter.SetKeyFromPassphrase(strWalletPassphrase, pMasterKey.second.vchSalt, pMasterKey.second.nDeriveIterations, pMasterKey.second.nDerivationMethod)) |
|
|
|
|
return false; |
|
|
|
@ -320,7 +320,7 @@ bool CWallet::ChangeWalletPassphrase(const SecureString& strOldWalletPassphrase,
@@ -320,7 +320,7 @@ bool CWallet::ChangeWalletPassphrase(const SecureString& strOldWalletPassphrase,
|
|
|
|
|
|
|
|
|
|
CCrypter crypter; |
|
|
|
|
CKeyingMaterial _vMasterKey; |
|
|
|
|
BOOST_FOREACH(MasterKeyMap::value_type& pMasterKey, mapMasterKeys) |
|
|
|
|
for (MasterKeyMap::value_type& pMasterKey : mapMasterKeys) |
|
|
|
|
{ |
|
|
|
|
if(!crypter.SetKeyFromPassphrase(strOldWalletPassphrase, pMasterKey.second.vchSalt, pMasterKey.second.nDeriveIterations, pMasterKey.second.nDerivationMethod)) |
|
|
|
|
return false; |
|
|
|
@ -412,7 +412,7 @@ std::set<uint256> CWallet::GetConflicts(const uint256& txid) const
@@ -412,7 +412,7 @@ std::set<uint256> CWallet::GetConflicts(const uint256& txid) const
|
|
|
|
|
|
|
|
|
|
std::pair<TxSpends::const_iterator, TxSpends::const_iterator> range; |
|
|
|
|
|
|
|
|
|
BOOST_FOREACH(const CTxIn& txin, wtx.tx->vin) |
|
|
|
|
for (const CTxIn& txin : wtx.tx->vin) |
|
|
|
|
{ |
|
|
|
|
if (mapTxSpends.count(txin.prevout) <= 1) |
|
|
|
|
continue; // No conflict if zero or one spends
|
|
|
|
@ -554,7 +554,7 @@ void CWallet::AddToSpends(const uint256& wtxid)
@@ -554,7 +554,7 @@ void CWallet::AddToSpends(const uint256& wtxid)
|
|
|
|
|
if (thisTx.IsCoinBase()) // Coinbases don't spend anything!
|
|
|
|
|
return; |
|
|
|
|
|
|
|
|
|
BOOST_FOREACH(const CTxIn& txin, thisTx.tx->vin) |
|
|
|
|
for (const CTxIn& txin : thisTx.tx->vin) |
|
|
|
|
AddToSpends(txin.prevout, wtxid); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -669,7 +669,7 @@ DBErrors CWallet::ReorderTransactions()
@@ -669,7 +669,7 @@ DBErrors CWallet::ReorderTransactions()
|
|
|
|
|
} |
|
|
|
|
std::list<CAccountingEntry> acentries; |
|
|
|
|
walletdb.ListAccountCreditDebit("", acentries); |
|
|
|
|
BOOST_FOREACH(CAccountingEntry& entry, acentries) |
|
|
|
|
for (CAccountingEntry& entry : acentries) |
|
|
|
|
{ |
|
|
|
|
txByTime.insert(std::make_pair(entry.nTime, TxPair((CWalletTx*)0, &entry))); |
|
|
|
|
} |
|
|
|
@ -699,7 +699,7 @@ DBErrors CWallet::ReorderTransactions()
@@ -699,7 +699,7 @@ DBErrors CWallet::ReorderTransactions()
|
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
int64_t nOrderPosOff = 0; |
|
|
|
|
BOOST_FOREACH(const int64_t& nOffsetStart, nOrderPosOffsets) |
|
|
|
|
for (const int64_t& nOffsetStart : nOrderPosOffsets) |
|
|
|
|
{ |
|
|
|
|
if (nOrderPos >= nOffsetStart) |
|
|
|
|
++nOrderPosOff; |
|
|
|
@ -788,7 +788,7 @@ bool CWallet::GetAccountPubkey(CPubKey &pubKey, std::string strAccount, bool bFo
@@ -788,7 +788,7 @@ bool CWallet::GetAccountPubkey(CPubKey &pubKey, std::string strAccount, bool bFo
|
|
|
|
|
for (std::map<uint256, CWalletTx>::iterator it = mapWallet.begin(); |
|
|
|
|
it != mapWallet.end() && account.vchPubKey.IsValid(); |
|
|
|
|
++it) |
|
|
|
|
BOOST_FOREACH(const CTxOut& txout, (*it).second.tx->vout) |
|
|
|
|
for (const CTxOut& txout : (*it).second.tx->vout) |
|
|
|
|
if (txout.scriptPubKey == scriptPubKey) { |
|
|
|
|
bForceNew = true; |
|
|
|
|
break; |
|
|
|
@ -814,7 +814,7 @@ void CWallet::MarkDirty()
@@ -814,7 +814,7 @@ void CWallet::MarkDirty()
|
|
|
|
|
{ |
|
|
|
|
{ |
|
|
|
|
LOCK(cs_wallet); |
|
|
|
|
BOOST_FOREACH(PAIRTYPE(const uint256, CWalletTx)& item, mapWallet) |
|
|
|
|
for (std::pair<const uint256, CWalletTx>& item : mapWallet) |
|
|
|
|
item.second.MarkDirty(); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -932,7 +932,7 @@ bool CWallet::LoadToWallet(const CWalletTx& wtxIn)
@@ -932,7 +932,7 @@ bool CWallet::LoadToWallet(const CWalletTx& wtxIn)
|
|
|
|
|
wtx.BindWallet(this); |
|
|
|
|
wtxOrdered.insert(std::make_pair(wtx.nOrderPos, TxPair(&wtx, (CAccountingEntry*)0))); |
|
|
|
|
AddToSpends(hash); |
|
|
|
|
BOOST_FOREACH(const CTxIn& txin, wtx.tx->vin) { |
|
|
|
|
for (const CTxIn& txin : wtx.tx->vin) { |
|
|
|
|
if (mapWallet.count(txin.prevout.hash)) { |
|
|
|
|
CWalletTx& prevtx = mapWallet[txin.prevout.hash]; |
|
|
|
|
if (prevtx.nIndex == -1 && !prevtx.hashUnset()) { |
|
|
|
@ -964,7 +964,7 @@ bool CWallet::AddToWalletIfInvolvingMe(const CTransactionRef& ptx, const CBlockI
@@ -964,7 +964,7 @@ bool CWallet::AddToWalletIfInvolvingMe(const CTransactionRef& ptx, const CBlockI
|
|
|
|
|
AssertLockHeld(cs_wallet); |
|
|
|
|
|
|
|
|
|
if (pIndex != NULL) { |
|
|
|
|
BOOST_FOREACH(const CTxIn& txin, tx.vin) { |
|
|
|
|
for (const CTxIn& txin : tx.vin) { |
|
|
|
|
std::pair<TxSpends::const_iterator, TxSpends::const_iterator> range = mapTxSpends.equal_range(txin.prevout); |
|
|
|
|
while (range.first != range.second) { |
|
|
|
|
if (range.first->second != tx.GetHash()) { |
|
|
|
@ -1045,7 +1045,7 @@ bool CWallet::AbandonTransaction(const uint256& hashTx)
@@ -1045,7 +1045,7 @@ bool CWallet::AbandonTransaction(const uint256& hashTx)
|
|
|
|
|
} |
|
|
|
|
// If a transaction changes 'conflicted' state, that changes the balance
|
|
|
|
|
// available of the outputs it spends. So force those to be recomputed
|
|
|
|
|
BOOST_FOREACH(const CTxIn& txin, wtx.tx->vin) |
|
|
|
|
for (const CTxIn& txin : wtx.tx->vin) |
|
|
|
|
{ |
|
|
|
|
if (mapWallet.count(txin.prevout.hash)) |
|
|
|
|
mapWallet[txin.prevout.hash].MarkDirty(); |
|
|
|
@ -1106,7 +1106,7 @@ void CWallet::MarkConflicted(const uint256& hashBlock, const uint256& hashTx)
@@ -1106,7 +1106,7 @@ void CWallet::MarkConflicted(const uint256& hashBlock, const uint256& hashTx)
|
|
|
|
|
} |
|
|
|
|
// If a transaction changes 'conflicted' state, that changes the balance
|
|
|
|
|
// available of the outputs it spends. So force those to be recomputed
|
|
|
|
|
BOOST_FOREACH(const CTxIn& txin, wtx.tx->vin) |
|
|
|
|
for (const CTxIn& txin : wtx.tx->vin) |
|
|
|
|
{ |
|
|
|
|
if (mapWallet.count(txin.prevout.hash)) |
|
|
|
|
mapWallet[txin.prevout.hash].MarkDirty(); |
|
|
|
@ -1124,7 +1124,7 @@ void CWallet::SyncTransaction(const CTransactionRef& ptx, const CBlockIndex *pin
@@ -1124,7 +1124,7 @@ void CWallet::SyncTransaction(const CTransactionRef& ptx, const CBlockIndex *pin
|
|
|
|
|
// If a transaction changes 'conflicted' state, that changes the balance
|
|
|
|
|
// available of the outputs it spends. So force those to be
|
|
|
|
|
// recomputed, also:
|
|
|
|
|
BOOST_FOREACH(const CTxIn& txin, tx.vin) |
|
|
|
|
for (const CTxIn& txin : tx.vin) |
|
|
|
|
{ |
|
|
|
|
if (mapWallet.count(txin.prevout.hash)) |
|
|
|
|
mapWallet[txin.prevout.hash].MarkDirty(); |
|
|
|
@ -1240,7 +1240,7 @@ CAmount CWallet::GetChange(const CTxOut& txout) const
@@ -1240,7 +1240,7 @@ CAmount CWallet::GetChange(const CTxOut& txout) const
|
|
|
|
|
|
|
|
|
|
bool CWallet::IsMine(const CTransaction& tx) const |
|
|
|
|
{ |
|
|
|
|
BOOST_FOREACH(const CTxOut& txout, tx.vout) |
|
|
|
|
for (const CTxOut& txout : tx.vout) |
|
|
|
|
if (IsMine(txout)) |
|
|
|
|
return true; |
|
|
|
|
return false; |
|
|
|
@ -1254,7 +1254,7 @@ bool CWallet::IsFromMe(const CTransaction& tx) const
@@ -1254,7 +1254,7 @@ bool CWallet::IsFromMe(const CTransaction& tx) const
|
|
|
|
|
CAmount CWallet::GetDebit(const CTransaction& tx, const isminefilter& filter) const |
|
|
|
|
{ |
|
|
|
|
CAmount nDebit = 0; |
|
|
|
|
BOOST_FOREACH(const CTxIn& txin, tx.vin) |
|
|
|
|
for (const CTxIn& txin : tx.vin) |
|
|
|
|
{ |
|
|
|
|
nDebit += GetDebit(txin, filter); |
|
|
|
|
if (!MoneyRange(nDebit)) |
|
|
|
@ -1267,7 +1267,7 @@ bool CWallet::IsAllFromMe(const CTransaction& tx, const isminefilter& filter) co
@@ -1267,7 +1267,7 @@ bool CWallet::IsAllFromMe(const CTransaction& tx, const isminefilter& filter) co
|
|
|
|
|
{ |
|
|
|
|
LOCK(cs_wallet); |
|
|
|
|
|
|
|
|
|
BOOST_FOREACH(const CTxIn& txin, tx.vin) |
|
|
|
|
for (const CTxIn& txin : tx.vin) |
|
|
|
|
{ |
|
|
|
|
auto mi = mapWallet.find(txin.prevout.hash); |
|
|
|
|
if (mi == mapWallet.end()) |
|
|
|
@ -1287,7 +1287,7 @@ bool CWallet::IsAllFromMe(const CTransaction& tx, const isminefilter& filter) co
@@ -1287,7 +1287,7 @@ bool CWallet::IsAllFromMe(const CTransaction& tx, const isminefilter& filter) co
|
|
|
|
|
CAmount CWallet::GetCredit(const CTransaction& tx, const isminefilter& filter) const |
|
|
|
|
{ |
|
|
|
|
CAmount nCredit = 0; |
|
|
|
|
BOOST_FOREACH(const CTxOut& txout, tx.vout) |
|
|
|
|
for (const CTxOut& txout : tx.vout) |
|
|
|
|
{ |
|
|
|
|
nCredit += GetCredit(txout, filter); |
|
|
|
|
if (!MoneyRange(nCredit)) |
|
|
|
@ -1299,7 +1299,7 @@ CAmount CWallet::GetCredit(const CTransaction& tx, const isminefilter& filter) c
@@ -1299,7 +1299,7 @@ CAmount CWallet::GetCredit(const CTransaction& tx, const isminefilter& filter) c
|
|
|
|
|
CAmount CWallet::GetChange(const CTransaction& tx) const |
|
|
|
|
{ |
|
|
|
|
CAmount nChange = 0; |
|
|
|
|
BOOST_FOREACH(const CTxOut& txout, tx.vout) |
|
|
|
|
for (const CTxOut& txout : tx.vout) |
|
|
|
|
{ |
|
|
|
|
nChange += GetChange(txout); |
|
|
|
|
if (!MoneyRange(nChange)) |
|
|
|
@ -1535,7 +1535,7 @@ void CWallet::ReacceptWalletTransactions()
@@ -1535,7 +1535,7 @@ void CWallet::ReacceptWalletTransactions()
|
|
|
|
|
std::map<int64_t, CWalletTx*> mapSorted; |
|
|
|
|
|
|
|
|
|
// Sort pending wallet transactions based on their initial wallet insertion order
|
|
|
|
|
BOOST_FOREACH(PAIRTYPE(const uint256, CWalletTx)& item, mapWallet) |
|
|
|
|
for (std::pair<const uint256, CWalletTx>& item : mapWallet) |
|
|
|
|
{ |
|
|
|
|
const uint256& wtxid = item.first; |
|
|
|
|
CWalletTx& wtx = item.second; |
|
|
|
@ -1549,7 +1549,7 @@ void CWallet::ReacceptWalletTransactions()
@@ -1549,7 +1549,7 @@ void CWallet::ReacceptWalletTransactions()
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Try to add wallet transactions to memory pool
|
|
|
|
|
BOOST_FOREACH(PAIRTYPE(const int64_t, CWalletTx*)& item, mapSorted) |
|
|
|
|
for (std::pair<const int64_t, CWalletTx*>& item : mapSorted) |
|
|
|
|
{ |
|
|
|
|
CWalletTx& wtx = *(item.second); |
|
|
|
|
|
|
|
|
@ -1777,7 +1777,7 @@ bool CWalletTx::IsTrusted() const
@@ -1777,7 +1777,7 @@ bool CWalletTx::IsTrusted() const
|
|
|
|
|
return false; |
|
|
|
|
|
|
|
|
|
// Trusted if all inputs are from us and are in the mempool:
|
|
|
|
|
BOOST_FOREACH(const CTxIn& txin, tx->vin) |
|
|
|
|
for (const CTxIn& txin : tx->vin) |
|
|
|
|
{ |
|
|
|
|
// Transactions not sent by us: not trusted
|
|
|
|
|
const CWalletTx* parent = pwallet->GetWalletTx(txin.prevout.hash); |
|
|
|
@ -1806,7 +1806,7 @@ std::vector<uint256> CWallet::ResendWalletTransactionsBefore(int64_t nTime, CCon
@@ -1806,7 +1806,7 @@ std::vector<uint256> CWallet::ResendWalletTransactionsBefore(int64_t nTime, CCon
|
|
|
|
|
LOCK(cs_wallet); |
|
|
|
|
// Sort them in chronological order
|
|
|
|
|
std::multimap<unsigned int, CWalletTx*> mapSorted; |
|
|
|
|
BOOST_FOREACH(PAIRTYPE(const uint256, CWalletTx)& item, mapWallet) |
|
|
|
|
for (std::pair<const uint256, CWalletTx>& item : mapWallet) |
|
|
|
|
{ |
|
|
|
|
CWalletTx& wtx = item.second; |
|
|
|
|
// Don't rebroadcast if newer than nTime:
|
|
|
|
@ -1814,7 +1814,7 @@ std::vector<uint256> CWallet::ResendWalletTransactionsBefore(int64_t nTime, CCon
@@ -1814,7 +1814,7 @@ std::vector<uint256> CWallet::ResendWalletTransactionsBefore(int64_t nTime, CCon
|
|
|
|
|
continue; |
|
|
|
|
mapSorted.insert(std::make_pair(wtx.nTimeReceived, &wtx)); |
|
|
|
|
} |
|
|
|
|
BOOST_FOREACH(PAIRTYPE(const unsigned int, CWalletTx*)& item, mapSorted) |
|
|
|
|
for (std::pair<const unsigned int, CWalletTx*>& item : mapSorted) |
|
|
|
|
{ |
|
|
|
|
CWalletTx& wtx = *item.second; |
|
|
|
|
if (wtx.RelayWalletTransaction(connman)) |
|
|
|
@ -2238,7 +2238,7 @@ bool CWallet::SelectCoinsMinConf(const CAmount& nTargetValue, const int nConfMin
@@ -2238,7 +2238,7 @@ bool CWallet::SelectCoinsMinConf(const CAmount& nTargetValue, const int nConfMin
|
|
|
|
|
|
|
|
|
|
random_shuffle(vCoins.begin(), vCoins.end(), GetRandInt); |
|
|
|
|
|
|
|
|
|
BOOST_FOREACH(const COutput &output, vCoins) |
|
|
|
|
for (const COutput &output : vCoins) |
|
|
|
|
{ |
|
|
|
|
if (!output.fSpendable) |
|
|
|
|
continue; |
|
|
|
@ -2338,7 +2338,7 @@ bool CWallet::SelectCoins(const std::vector<COutput>& vAvailableCoins, const CAm
@@ -2338,7 +2338,7 @@ bool CWallet::SelectCoins(const std::vector<COutput>& vAvailableCoins, const CAm
|
|
|
|
|
// coin control -> return all selected outputs (we want all selected to go into the transaction for sure)
|
|
|
|
|
if (coinControl && coinControl->HasSelected() && !coinControl->fAllowOtherInputs) |
|
|
|
|
{ |
|
|
|
|
BOOST_FOREACH(const COutput& out, vCoins) |
|
|
|
|
for (const COutput& out : vCoins) |
|
|
|
|
{ |
|
|
|
|
if (!out.fSpendable) |
|
|
|
|
continue; |
|
|
|
@ -2355,7 +2355,7 @@ bool CWallet::SelectCoins(const std::vector<COutput>& vAvailableCoins, const CAm
@@ -2355,7 +2355,7 @@ bool CWallet::SelectCoins(const std::vector<COutput>& vAvailableCoins, const CAm
|
|
|
|
|
std::vector<COutPoint> vPresetInputs; |
|
|
|
|
if (coinControl) |
|
|
|
|
coinControl->ListSelected(vPresetInputs); |
|
|
|
|
BOOST_FOREACH(const COutPoint& outpoint, vPresetInputs) |
|
|
|
|
for (const COutPoint& outpoint : vPresetInputs) |
|
|
|
|
{ |
|
|
|
|
std::map<uint256, CWalletTx>::const_iterator it = mapWallet.find(outpoint.hash); |
|
|
|
|
if (it != mapWallet.end()) |
|
|
|
@ -2438,7 +2438,7 @@ bool CWallet::FundTransaction(CMutableTransaction& tx, CAmount& nFeeRet, int& nC
@@ -2438,7 +2438,7 @@ bool CWallet::FundTransaction(CMutableTransaction& tx, CAmount& nFeeRet, int& nC
|
|
|
|
|
|
|
|
|
|
coinControl.fAllowOtherInputs = true; |
|
|
|
|
|
|
|
|
|
BOOST_FOREACH(const CTxIn& txin, tx.vin) |
|
|
|
|
for (const CTxIn& txin : tx.vin) |
|
|
|
|
coinControl.Select(txin.prevout); |
|
|
|
|
|
|
|
|
|
CReserveKey reservekey(this); |
|
|
|
@ -2454,7 +2454,7 @@ bool CWallet::FundTransaction(CMutableTransaction& tx, CAmount& nFeeRet, int& nC
@@ -2454,7 +2454,7 @@ bool CWallet::FundTransaction(CMutableTransaction& tx, CAmount& nFeeRet, int& nC
|
|
|
|
|
tx.vout[idx].nValue = wtx.tx->vout[idx].nValue; |
|
|
|
|
|
|
|
|
|
// Add new txins (keeping original txin scriptSig/order)
|
|
|
|
|
BOOST_FOREACH(const CTxIn& txin, wtx.tx->vin) |
|
|
|
|
for (const CTxIn& txin : wtx.tx->vin) |
|
|
|
|
{ |
|
|
|
|
if (!coinControl.IsSelected(txin.prevout)) |
|
|
|
|
{ |
|
|
|
@ -2838,7 +2838,7 @@ bool CWallet::CommitTransaction(CWalletTx& wtxNew, CReserveKey& reservekey, CCon
@@ -2838,7 +2838,7 @@ bool CWallet::CommitTransaction(CWalletTx& wtxNew, CReserveKey& reservekey, CCon
|
|
|
|
|
AddToWallet(wtxNew); |
|
|
|
|
|
|
|
|
|
// Notify that old coins are spent
|
|
|
|
|
BOOST_FOREACH(const CTxIn& txin, wtxNew.tx->vin) |
|
|
|
|
for (const CTxIn& txin : wtxNew.tx->vin) |
|
|
|
|
{ |
|
|
|
|
CWalletTx &coin = mapWallet[txin.prevout.hash]; |
|
|
|
|
coin.BindWallet(this); |
|
|
|
@ -3017,7 +3017,7 @@ bool CWallet::DelAddressBook(const CTxDestination& address)
@@ -3017,7 +3017,7 @@ bool CWallet::DelAddressBook(const CTxDestination& address)
|
|
|
|
|
|
|
|
|
|
// Delete destdata tuples associated with address
|
|
|
|
|
std::string strAddress = CBitcoinAddress(address).ToString(); |
|
|
|
|
BOOST_FOREACH(const PAIRTYPE(std::string, std::string) &item, mapAddressBook[address].destdata) |
|
|
|
|
for (const std::pair<std::string, std::string> &item : mapAddressBook[address].destdata) |
|
|
|
|
{ |
|
|
|
|
CWalletDB(*dbw).EraseDestData(strAddress, item.first); |
|
|
|
|
} |
|
|
|
@ -3062,7 +3062,7 @@ bool CWallet::NewKeyPool()
@@ -3062,7 +3062,7 @@ bool CWallet::NewKeyPool()
|
|
|
|
|
{ |
|
|
|
|
LOCK(cs_wallet); |
|
|
|
|
CWalletDB walletdb(*dbw); |
|
|
|
|
BOOST_FOREACH(int64_t nIndex, setKeyPool) |
|
|
|
|
for (int64_t nIndex : setKeyPool) |
|
|
|
|
walletdb.ErasePool(nIndex); |
|
|
|
|
setKeyPool.clear(); |
|
|
|
|
|
|
|
|
@ -3312,7 +3312,7 @@ std::set< std::set<CTxDestination> > CWallet::GetAddressGroupings()
@@ -3312,7 +3312,7 @@ std::set< std::set<CTxDestination> > CWallet::GetAddressGroupings()
|
|
|
|
|
{ |
|
|
|
|
bool any_mine = false; |
|
|
|
|
// group all input addresses with each other
|
|
|
|
|
BOOST_FOREACH(CTxIn txin, pcoin->tx->vin) |
|
|
|
|
for (CTxIn txin : pcoin->tx->vin) |
|
|
|
|
{ |
|
|
|
|
CTxDestination address; |
|
|
|
|
if(!IsMine(txin)) /* If this input isn't mine, ignore it */ |
|
|
|
@ -3326,7 +3326,7 @@ std::set< std::set<CTxDestination> > CWallet::GetAddressGroupings()
@@ -3326,7 +3326,7 @@ std::set< std::set<CTxDestination> > CWallet::GetAddressGroupings()
|
|
|
|
|
// group change with input addresses
|
|
|
|
|
if (any_mine) |
|
|
|
|
{ |
|
|
|
|
BOOST_FOREACH(CTxOut txout, pcoin->tx->vout) |
|
|
|
|
for (CTxOut txout : pcoin->tx->vout) |
|
|
|
|
if (IsChange(txout)) |
|
|
|
|
{ |
|
|
|
|
CTxDestination txoutAddr; |
|
|
|
@ -3357,18 +3357,18 @@ std::set< std::set<CTxDestination> > CWallet::GetAddressGroupings()
@@ -3357,18 +3357,18 @@ std::set< std::set<CTxDestination> > CWallet::GetAddressGroupings()
|
|
|
|
|
|
|
|
|
|
std::set< std::set<CTxDestination>* > uniqueGroupings; // a set of pointers to groups of addresses
|
|
|
|
|
std::map< CTxDestination, std::set<CTxDestination>* > setmap; // map addresses to the unique group containing it
|
|
|
|
|
BOOST_FOREACH(std::set<CTxDestination> _grouping, groupings) |
|
|
|
|
for (std::set<CTxDestination> _grouping : groupings) |
|
|
|
|
{ |
|
|
|
|
// make a set of all the groups hit by this new group
|
|
|
|
|
std::set< std::set<CTxDestination>* > hits; |
|
|
|
|
std::map< CTxDestination, std::set<CTxDestination>* >::iterator it; |
|
|
|
|
BOOST_FOREACH(CTxDestination address, _grouping) |
|
|
|
|
for (CTxDestination address : _grouping) |
|
|
|
|
if ((it = setmap.find(address)) != setmap.end()) |
|
|
|
|
hits.insert((*it).second); |
|
|
|
|
|
|
|
|
|
// merge all hit groups into a new single group and delete old groups
|
|
|
|
|
std::set<CTxDestination>* merged = new std::set<CTxDestination>(_grouping); |
|
|
|
|
BOOST_FOREACH(std::set<CTxDestination>* hit, hits) |
|
|
|
|
for (std::set<CTxDestination>* hit : hits) |
|
|
|
|
{ |
|
|
|
|
merged->insert(hit->begin(), hit->end()); |
|
|
|
|
uniqueGroupings.erase(hit); |
|
|
|
@ -3377,12 +3377,12 @@ std::set< std::set<CTxDestination> > CWallet::GetAddressGroupings()
@@ -3377,12 +3377,12 @@ std::set< std::set<CTxDestination> > CWallet::GetAddressGroupings()
|
|
|
|
|
uniqueGroupings.insert(merged); |
|
|
|
|
|
|
|
|
|
// update setmap
|
|
|
|
|
BOOST_FOREACH(CTxDestination element, *merged) |
|
|
|
|
for (CTxDestination element : *merged) |
|
|
|
|
setmap[element] = merged; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
std::set< std::set<CTxDestination> > ret; |
|
|
|
|
BOOST_FOREACH(std::set<CTxDestination>* uniqueGrouping, uniqueGroupings) |
|
|
|
|
for (std::set<CTxDestination>* uniqueGrouping : uniqueGroupings) |
|
|
|
|
{ |
|
|
|
|
ret.insert(*uniqueGrouping); |
|
|
|
|
delete uniqueGrouping; |
|
|
|
@ -3395,7 +3395,7 @@ std::set<CTxDestination> CWallet::GetAccountAddresses(const std::string& strAcco
@@ -3395,7 +3395,7 @@ std::set<CTxDestination> CWallet::GetAccountAddresses(const std::string& strAcco
|
|
|
|
|
{ |
|
|
|
|
LOCK(cs_wallet); |
|
|
|
|
std::set<CTxDestination> result; |
|
|
|
|
BOOST_FOREACH(const PAIRTYPE(CTxDestination, CAddressBookData)& item, mapAddressBook) |
|
|
|
|
for (const std::pair<CTxDestination, CAddressBookData>& item : mapAddressBook) |
|
|
|
|
{ |
|
|
|
|
const CTxDestination& address = item.first; |
|
|
|
|
const std::string& strName = item.second.name; |
|
|
|
@ -3445,7 +3445,7 @@ void CWallet::GetAllReserveKeys(std::set<CKeyID>& setAddress) const
@@ -3445,7 +3445,7 @@ void CWallet::GetAllReserveKeys(std::set<CKeyID>& setAddress) const
|
|
|
|
|
CWalletDB walletdb(*dbw); |
|
|
|
|
|
|
|
|
|
LOCK2(cs_main, cs_wallet); |
|
|
|
|
BOOST_FOREACH(const int64_t& id, setKeyPool) |
|
|
|
|
for (const int64_t& id : setKeyPool) |
|
|
|
|
{ |
|
|
|
|
CKeyPool keypool; |
|
|
|
|
if (!walletdb.ReadPool(id, keypool)) |
|
|
|
@ -3520,7 +3520,7 @@ public:
@@ -3520,7 +3520,7 @@ public:
|
|
|
|
|
std::vector<CTxDestination> vDest; |
|
|
|
|
int nRequired; |
|
|
|
|
if (ExtractDestinations(script, type, vDest, nRequired)) { |
|
|
|
|
BOOST_FOREACH(const CTxDestination &dest, vDest) |
|
|
|
|
for (const CTxDestination &dest : vDest) |
|
|
|
|
boost::apply_visitor(*this, dest); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -3555,7 +3555,7 @@ void CWallet::GetKeyBirthTimes(std::map<CTxDestination, int64_t> &mapKeyBirth) c
@@ -3555,7 +3555,7 @@ void CWallet::GetKeyBirthTimes(std::map<CTxDestination, int64_t> &mapKeyBirth) c
|
|
|
|
|
std::map<CKeyID, CBlockIndex*> mapKeyFirstBlock; |
|
|
|
|
std::set<CKeyID> setKeys; |
|
|
|
|
GetKeys(setKeys); |
|
|
|
|
BOOST_FOREACH(const CKeyID &keyid, setKeys) { |
|
|
|
|
for (const CKeyID &keyid : setKeys) { |
|
|
|
|
if (mapKeyBirth.count(keyid) == 0) |
|
|
|
|
mapKeyFirstBlock[keyid] = pindexMax; |
|
|
|
|
} |
|
|
|
@ -3574,10 +3574,10 @@ void CWallet::GetKeyBirthTimes(std::map<CTxDestination, int64_t> &mapKeyBirth) c
@@ -3574,10 +3574,10 @@ void CWallet::GetKeyBirthTimes(std::map<CTxDestination, int64_t> &mapKeyBirth) c
|
|
|
|
|
if (blit != mapBlockIndex.end() && chainActive.Contains(blit->second)) { |
|
|
|
|
// ... which are already in a block
|
|
|
|
|
int nHeight = blit->second->nHeight; |
|
|
|
|
BOOST_FOREACH(const CTxOut &txout, wtx.tx->vout) { |
|
|
|
|
for (const CTxOut &txout : wtx.tx->vout) { |
|
|
|
|
// iterate over all their outputs
|
|
|
|
|
CAffectedKeysVisitor(*this, vAffected).Process(txout.scriptPubKey); |
|
|
|
|
BOOST_FOREACH(const CKeyID &keyid, vAffected) { |
|
|
|
|
for (const CKeyID &keyid : vAffected) { |
|
|
|
|
// ... and all their affected keys
|
|
|
|
|
std::map<CKeyID, CBlockIndex*>::iterator rit = mapKeyFirstBlock.find(keyid); |
|
|
|
|
if (rit != mapKeyFirstBlock.end() && nHeight < rit->second->nHeight) |
|
|
|
@ -3898,7 +3898,7 @@ CWallet* CWallet::CreateWalletFromFile(const std::string walletFile)
@@ -3898,7 +3898,7 @@ CWallet* CWallet::CreateWalletFromFile(const std::string walletFile)
|
|
|
|
|
{ |
|
|
|
|
CWalletDB walletdb(*walletInstance->dbw); |
|
|
|
|
|
|
|
|
|
BOOST_FOREACH(const CWalletTx& wtxOld, vWtx) |
|
|
|
|
for (const CWalletTx& wtxOld : vWtx) |
|
|
|
|
{ |
|
|
|
|
uint256 hash = wtxOld.GetHash(); |
|
|
|
|
std::map<uint256, CWalletTx>::iterator mi = walletInstance->mapWallet.find(hash); |
|
|
|
|