|
|
@ -741,11 +741,14 @@ void CWallet::MarkDirty() |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
bool CWallet::AddToWallet(const CWalletTx& wtxIn, CWalletDB* pwalletdb) |
|
|
|
bool CWallet::AddToWallet(const CWalletTx& wtxIn, bool fFlushOnClose) |
|
|
|
{ |
|
|
|
{ |
|
|
|
|
|
|
|
LOCK(cs_wallet); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CWalletDB walletdb(strWalletFile, "r+", fFlushOnClose); |
|
|
|
|
|
|
|
|
|
|
|
uint256 hash = wtxIn.GetHash(); |
|
|
|
uint256 hash = wtxIn.GetHash(); |
|
|
|
|
|
|
|
|
|
|
|
LOCK(cs_wallet); |
|
|
|
|
|
|
|
// Inserts only if not already there, returns tx inserted or tx found
|
|
|
|
// Inserts only if not already there, returns tx inserted or tx found
|
|
|
|
pair<map<uint256, CWalletTx>::iterator, bool> ret = mapWallet.insert(make_pair(hash, wtxIn)); |
|
|
|
pair<map<uint256, CWalletTx>::iterator, bool> ret = mapWallet.insert(make_pair(hash, wtxIn)); |
|
|
|
CWalletTx& wtx = (*ret.first).second; |
|
|
|
CWalletTx& wtx = (*ret.first).second; |
|
|
@ -754,7 +757,7 @@ bool CWallet::AddToWallet(const CWalletTx& wtxIn, CWalletDB* pwalletdb) |
|
|
|
if (fInsertedNew) |
|
|
|
if (fInsertedNew) |
|
|
|
{ |
|
|
|
{ |
|
|
|
wtx.nTimeReceived = GetAdjustedTime(); |
|
|
|
wtx.nTimeReceived = GetAdjustedTime(); |
|
|
|
wtx.nOrderPos = IncOrderPosNext(pwalletdb); |
|
|
|
wtx.nOrderPos = IncOrderPosNext(&walletdb); |
|
|
|
wtxOrdered.insert(make_pair(wtx.nOrderPos, TxPair(&wtx, (CAccountingEntry*)0))); |
|
|
|
wtxOrdered.insert(make_pair(wtx.nOrderPos, TxPair(&wtx, (CAccountingEntry*)0))); |
|
|
|
|
|
|
|
|
|
|
|
wtx.nTimeSmart = wtx.nTimeReceived; |
|
|
|
wtx.nTimeSmart = wtx.nTimeReceived; |
|
|
@ -836,7 +839,7 @@ bool CWallet::AddToWallet(const CWalletTx& wtxIn, CWalletDB* pwalletdb) |
|
|
|
|
|
|
|
|
|
|
|
// Write to disk
|
|
|
|
// Write to disk
|
|
|
|
if (fInsertedNew || fUpdated) |
|
|
|
if (fInsertedNew || fUpdated) |
|
|
|
if (!pwalletdb->WriteTx(wtx)) |
|
|
|
if (!walletdb.WriteTx(wtx)) |
|
|
|
return false; |
|
|
|
return false; |
|
|
|
|
|
|
|
|
|
|
|
// Break debit/credit balance caches:
|
|
|
|
// Break debit/credit balance caches:
|
|
|
@ -911,11 +914,7 @@ bool CWallet::AddToWalletIfInvolvingMe(const CTransaction& tx, const CBlock* pbl |
|
|
|
if (pblock) |
|
|
|
if (pblock) |
|
|
|
wtx.SetMerkleBranch(*pblock); |
|
|
|
wtx.SetMerkleBranch(*pblock); |
|
|
|
|
|
|
|
|
|
|
|
// Do not flush the wallet here for performance reasons
|
|
|
|
return AddToWallet(wtx, false); |
|
|
|
// this is safe, as in case of a crash, we rescan the necessary blocks on startup through our SetBestChain-mechanism
|
|
|
|
|
|
|
|
CWalletDB walletdb(strWalletFile, "r+", false); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return AddToWallet(wtx, &walletdb); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
return false; |
|
|
|
return false; |
|
|
@ -2458,7 +2457,7 @@ bool CWallet::CommitTransaction(CWalletTx& wtxNew, CReserveKey& reservekey) |
|
|
|
|
|
|
|
|
|
|
|
// Add tx to wallet, because if it has change it's also ours,
|
|
|
|
// Add tx to wallet, because if it has change it's also ours,
|
|
|
|
// otherwise just for transaction history.
|
|
|
|
// otherwise just for transaction history.
|
|
|
|
AddToWallet(wtxNew, pwalletdb); |
|
|
|
AddToWallet(wtxNew); |
|
|
|
|
|
|
|
|
|
|
|
// Notify that old coins are spent
|
|
|
|
// Notify that old coins are spent
|
|
|
|
set<CWalletTx*> setCoins; |
|
|
|
set<CWalletTx*> setCoins; |
|
|
|