@ -162,7 +162,7 @@ void CWallet::DeriveNewChildKey(CKeyMetadata& metadata, CKey& secret, bool inter
@@ -162,7 +162,7 @@ void CWallet::DeriveNewChildKey(CKeyMetadata& metadata, CKey& secret, bool inter
secret = childKey . key ;
metadata . hdMasterKeyID = hdChain . masterKeyID ;
// update the chain model in the database
if ( ! CWalletDB ( strWalletFile ) . WriteHDChain ( hdChain ) )
if ( ! CWalletDB ( * dbw ) . WriteHDChain ( hdChain ) )
throw std : : runtime_error ( std : : string ( __func__ ) + " : Writing HD chain model failed " ) ;
}
@ -181,10 +181,8 @@ bool CWallet::AddKeyPubKey(const CKey& secret, const CPubKey &pubkey)
@@ -181,10 +181,8 @@ bool CWallet::AddKeyPubKey(const CKey& secret, const CPubKey &pubkey)
if ( HaveWatchOnly ( script ) )
RemoveWatchOnly ( script ) ;
if ( ! fFileBacked )
return true ;
if ( ! IsCrypted ( ) ) {
return CWalletDB ( strWalletFile ) . WriteKey ( pubkey ,
return CWalletDB ( * dbw ) . WriteKey ( pubkey ,
secret . GetPrivKey ( ) ,
mapKeyMetadata [ pubkey . GetID ( ) ] ) ;
}
@ -196,8 +194,6 @@ bool CWallet::AddCryptedKey(const CPubKey &vchPubKey,
@@ -196,8 +194,6 @@ bool CWallet::AddCryptedKey(const CPubKey &vchPubKey,
{
if ( ! CCryptoKeyStore : : AddCryptedKey ( vchPubKey , vchCryptedSecret ) )
return false ;
if ( ! fFileBacked )
return true ;
{
LOCK ( cs_wallet ) ;
if ( pwalletdbEncryption )
@ -205,7 +201,7 @@ bool CWallet::AddCryptedKey(const CPubKey &vchPubKey,
@@ -205,7 +201,7 @@ bool CWallet::AddCryptedKey(const CPubKey &vchPubKey,
vchCryptedSecret ,
mapKeyMetadata [ vchPubKey . GetID ( ) ] ) ;
else
return CWalletDB ( strWalletFile ) . WriteCryptedKey ( vchPubKey ,
return CWalletDB ( * dbw ) . WriteCryptedKey ( vchPubKey ,
vchCryptedSecret ,
mapKeyMetadata [ vchPubKey . GetID ( ) ] ) ;
}
@ -241,9 +237,7 @@ bool CWallet::AddCScript(const CScript& redeemScript)
@@ -241,9 +237,7 @@ bool CWallet::AddCScript(const CScript& redeemScript)
{
if ( ! CCryptoKeyStore : : AddCScript ( redeemScript ) )
return false ;
if ( ! fFileBacked )
return true ;
return CWalletDB ( strWalletFile ) . WriteCScript ( Hash160 ( redeemScript ) , redeemScript ) ;
return CWalletDB ( * dbw ) . WriteCScript ( Hash160 ( redeemScript ) , redeemScript ) ;
}
bool CWallet : : LoadCScript ( const CScript & redeemScript )
@ -269,9 +263,7 @@ bool CWallet::AddWatchOnly(const CScript& dest)
@@ -269,9 +263,7 @@ bool CWallet::AddWatchOnly(const CScript& dest)
const CKeyMetadata & meta = mapKeyMetadata [ CScriptID ( dest ) ] ;
UpdateTimeFirstKey ( meta . nCreateTime ) ;
NotifyWatchonlyChanged ( true ) ;
if ( ! fFileBacked )
return true ;
return CWalletDB ( strWalletFile ) . WriteWatchOnly ( dest , meta ) ;
return CWalletDB ( * dbw ) . WriteWatchOnly ( dest , meta ) ;
}
bool CWallet : : AddWatchOnly ( const CScript & dest , int64_t nCreateTime )
@ -287,8 +279,7 @@ bool CWallet::RemoveWatchOnly(const CScript &dest)
@@ -287,8 +279,7 @@ bool CWallet::RemoveWatchOnly(const CScript &dest)
return false ;
if ( ! HaveWatchOnly ( ) )
NotifyWatchonlyChanged ( false ) ;
if ( fFileBacked )
if ( ! CWalletDB ( strWalletFile ) . EraseWatchOnly ( dest ) )
if ( ! CWalletDB ( * dbw ) . EraseWatchOnly ( dest ) )
return false ;
return true ;
@ -354,7 +345,7 @@ bool CWallet::ChangeWalletPassphrase(const SecureString& strOldWalletPassphrase,
@@ -354,7 +345,7 @@ bool CWallet::ChangeWalletPassphrase(const SecureString& strOldWalletPassphrase,
return false ;
if ( ! crypter . Encrypt ( _vMasterKey , pMasterKey . second . vchCryptedKey ) )
return false ;
CWalletDB ( strWalletFile ) . WriteMasterKey ( pMasterKey . first , pMasterKey . second ) ;
CWalletDB ( * dbw ) . WriteMasterKey ( pMasterKey . first , pMasterKey . second ) ;
if ( fWasLocked )
Lock ( ) ;
return true ;
@ -367,7 +358,7 @@ bool CWallet::ChangeWalletPassphrase(const SecureString& strOldWalletPassphrase,
@@ -367,7 +358,7 @@ bool CWallet::ChangeWalletPassphrase(const SecureString& strOldWalletPassphrase,
void CWallet : : SetBestChain ( const CBlockLocator & loc )
{
CWalletDB walletdb ( strWalletFile ) ;
CWalletDB walletdb ( * dbw ) ;
walletdb . WriteBestBlock ( loc ) ;
}
@ -386,9 +377,8 @@ bool CWallet::SetMinVersion(enum WalletFeature nVersion, CWalletDB* pwalletdbIn,
@@ -386,9 +377,8 @@ bool CWallet::SetMinVersion(enum WalletFeature nVersion, CWalletDB* pwalletdbIn,
if ( nVersion > nWalletMaxVersion )
nWalletMaxVersion = nVersion ;
if ( fFileBacked )
{
CWalletDB * pwalletdb = pwalletdbIn ? pwalletdbIn : new CWalletDB ( strWalletFile ) ;
CWalletDB * pwalletdb = pwalletdbIn ? pwalletdbIn : new CWalletDB ( * dbw ) ;
if ( nWalletVersion > 40000 )
pwalletdb - > WriteMinVersion ( nWalletVersion ) ;
if ( ! pwalletdbIn )
@ -442,7 +432,7 @@ bool CWallet::HasWalletSpend(const uint256& txid) const
@@ -442,7 +432,7 @@ bool CWallet::HasWalletSpend(const uint256& txid) const
void CWallet : : Flush ( bool shutdown )
{
bitdb . Flush ( shutdown ) ;
dbw - > Flush ( shutdown ) ;
}
bool CWallet : : Verify ( )
@ -595,24 +585,19 @@ bool CWallet::EncryptWallet(const SecureString& strWalletPassphrase)
@@ -595,24 +585,19 @@ bool CWallet::EncryptWallet(const SecureString& strWalletPassphrase)
{
LOCK ( cs_wallet ) ;
mapMasterKeys [ + + nMasterKeyMaxID ] = kMasterKey ;
if ( fFileBacked )
{
assert ( ! pwalletdbEncryption ) ;
pwalletdbEncryption = new CWalletDB ( strWalletFile ) ;
pwalletdbEncryption = new CWalletDB ( * dbw ) ;
if ( ! pwalletdbEncryption - > TxnBegin ( ) ) {
delete pwalletdbEncryption ;
pwalletdbEncryption = NULL ;
return false ;
}
pwalletdbEncryption - > WriteMasterKey ( nMasterKeyMaxID , kMasterKey ) ;
}
if ( ! EncryptKeys ( _vMasterKey ) )
{
if ( fFileBacked ) {
pwalletdbEncryption - > TxnAbort ( ) ;
delete pwalletdbEncryption ;
}
// We now probably have half of our keys encrypted in memory, and half not...
// die and let the user reload the unencrypted wallet.
assert ( false ) ;
@ -621,8 +606,6 @@ bool CWallet::EncryptWallet(const SecureString& strWalletPassphrase)
@@ -621,8 +606,6 @@ bool CWallet::EncryptWallet(const SecureString& strWalletPassphrase)
// Encryption was introduced in version 0.4.0
SetMinVersion ( FEATURE_WALLETCRYPT , pwalletdbEncryption , true ) ;
if ( fFileBacked )
{
if ( ! pwalletdbEncryption - > TxnCommit ( ) ) {
delete pwalletdbEncryption ;
// We now have keys encrypted in memory, but not on disk...
@ -632,7 +615,6 @@ bool CWallet::EncryptWallet(const SecureString& strWalletPassphrase)
@@ -632,7 +615,6 @@ bool CWallet::EncryptWallet(const SecureString& strWalletPassphrase)
delete pwalletdbEncryption ;
pwalletdbEncryption = NULL ;
}
Lock ( ) ;
Unlock ( strWalletPassphrase ) ;
@ -652,7 +634,7 @@ bool CWallet::EncryptWallet(const SecureString& strWalletPassphrase)
@@ -652,7 +634,7 @@ bool CWallet::EncryptWallet(const SecureString& strWalletPassphrase)
// Need to completely rewrite the wallet file; if we don't, bdb might keep
// bits of the unencrypted private key in slack space in the database file.
CDB : : Rewrite ( strWalletFile ) ;
dbw - > Rewrite ( ) ;
}
NotifyStatusChanged ( this ) ;
@ -663,7 +645,7 @@ bool CWallet::EncryptWallet(const SecureString& strWalletPassphrase)
@@ -663,7 +645,7 @@ bool CWallet::EncryptWallet(const SecureString& strWalletPassphrase)
DBErrors CWallet : : ReorderTransactions ( )
{
LOCK ( cs_wallet ) ;
CWalletDB walletdb ( strWalletFile ) ;
CWalletDB walletdb ( * dbw ) ;
// Old wallets didn't have any defined order for transactions
// Probably a bad idea to change the output of this
@ -744,14 +726,14 @@ int64_t CWallet::IncOrderPosNext(CWalletDB *pwalletdb)
@@ -744,14 +726,14 @@ int64_t CWallet::IncOrderPosNext(CWalletDB *pwalletdb)
if ( pwalletdb ) {
pwalletdb - > WriteOrderPosNext ( nOrderPosNext ) ;
} else {
CWalletDB ( strWalletFile ) . WriteOrderPosNext ( nOrderPosNext ) ;
CWalletDB ( * dbw ) . WriteOrderPosNext ( nOrderPosNext ) ;
}
return nRet ;
}
bool CWallet : : AccountMove ( std : : string strFrom , std : : string strTo , CAmount nAmount , std : : string strComment )
{
CWalletDB walletdb ( strWalletFile ) ;
CWalletDB walletdb ( * dbw ) ;
if ( ! walletdb . TxnBegin ( ) )
return false ;
@ -785,7 +767,7 @@ bool CWallet::AccountMove(std::string strFrom, std::string strTo, CAmount nAmoun
@@ -785,7 +767,7 @@ bool CWallet::AccountMove(std::string strFrom, std::string strTo, CAmount nAmoun
bool CWallet : : GetAccountPubkey ( CPubKey & pubKey , std : : string strAccount , bool bForceNew )
{
CWalletDB walletdb ( strWalletFile ) ;
CWalletDB walletdb ( * dbw ) ;
CAccount account ;
walletdb . ReadAccount ( strAccount , account ) ;
@ -846,7 +828,7 @@ bool CWallet::MarkReplaced(const uint256& originalHash, const uint256& newHash)
@@ -846,7 +828,7 @@ bool CWallet::MarkReplaced(const uint256& originalHash, const uint256& newHash)
wtx . mapValue [ " replaced_by_txid " ] = newHash . ToString ( ) ;
CWalletDB walletdb ( strWalletFile , " r+ " ) ;
CWalletDB walletdb ( * dbw , " r+ " ) ;
bool success = true ;
if ( ! walletdb . WriteTx ( wtx ) ) {
@ -863,7 +845,7 @@ bool CWallet::AddToWallet(const CWalletTx& wtxIn, bool fFlushOnClose)
@@ -863,7 +845,7 @@ bool CWallet::AddToWallet(const CWalletTx& wtxIn, bool fFlushOnClose)
{
LOCK ( cs_wallet ) ;
CWalletDB walletdb ( strWalletFile , " r+ " , fFlushOnClose ) ;
CWalletDB walletdb ( * dbw , " r+ " , fFlushOnClose ) ;
uint256 hash = wtxIn . GetHash ( ) ;
@ -1007,7 +989,7 @@ bool CWallet::AbandonTransaction(const uint256& hashTx)
@@ -1007,7 +989,7 @@ bool CWallet::AbandonTransaction(const uint256& hashTx)
{
LOCK2 ( cs_main , cs_wallet ) ;
CWalletDB walletdb ( strWalletFile , " r+ " ) ;
CWalletDB walletdb ( * dbw , " r+ " ) ;
std : : set < uint256 > todo ;
std : : set < uint256 > done ;
@ -1079,7 +1061,7 @@ void CWallet::MarkConflicted(const uint256& hashBlock, const uint256& hashTx)
@@ -1079,7 +1061,7 @@ void CWallet::MarkConflicted(const uint256& hashBlock, const uint256& hashTx)
return ;
// Do not flush the wallet here for performance reasons
CWalletDB walletdb ( strWalletFile , " r+ " , false ) ;
CWalletDB walletdb ( * dbw , " r+ " , false ) ;
std : : set < uint256 > todo ;
std : : set < uint256 > done ;
@ -1362,7 +1344,7 @@ bool CWallet::SetHDMasterKey(const CPubKey& pubkey, CHDChain *possibleOldChain)
@@ -1362,7 +1344,7 @@ bool CWallet::SetHDMasterKey(const CPubKey& pubkey, CHDChain *possibleOldChain)
bool CWallet : : SetHDChain ( const CHDChain & chain , bool memonly )
{
LOCK ( cs_wallet ) ;
if ( ! memonly & & ! CWalletDB ( strWalletFile ) . WriteHDChain ( chain ) )
if ( ! memonly & & ! CWalletDB ( * dbw ) . WriteHDChain ( chain ) )
throw std : : runtime_error ( std : : string ( __func__ ) + " : writing chain failed " ) ;
hdChain = chain ;
@ -2759,13 +2741,13 @@ bool CWallet::CommitTransaction(CWalletTx& wtxNew, CReserveKey& reservekey, CCon
@@ -2759,13 +2741,13 @@ bool CWallet::CommitTransaction(CWalletTx& wtxNew, CReserveKey& reservekey, CCon
}
void CWallet : : ListAccountCreditDebit ( const std : : string & strAccount , std : : list < CAccountingEntry > & entries ) {
CWalletDB walletdb ( strWalletFile ) ;
CWalletDB walletdb ( * dbw ) ;
return walletdb . ListAccountCreditDebit ( strAccount , entries ) ;
}
bool CWallet : : AddAccountingEntry ( const CAccountingEntry & acentry )
{
CWalletDB walletdb ( strWalletFile ) ;
CWalletDB walletdb ( * dbw ) ;
return AddAccountingEntry ( acentry , & walletdb ) ;
}
@ -2817,13 +2799,11 @@ CAmount CWallet::GetMinimumFee(unsigned int nTxBytes, unsigned int nConfirmTarge
@@ -2817,13 +2799,11 @@ CAmount CWallet::GetMinimumFee(unsigned int nTxBytes, unsigned int nConfirmTarge
DBErrors CWallet : : LoadWallet ( bool & fFirstRunRet )
{
if ( ! fFileBacked )
return DB_LOAD_OK ;
fFirstRunRet = false ;
DBErrors nLoadWalletRet = CWalletDB ( strWalletFile , " cr+ " ) . LoadWallet ( this ) ;
DBErrors nLoadWalletRet = CWalletDB ( * dbw , " cr+ " ) . LoadWallet ( this ) ;
if ( nLoadWalletRet = = DB_NEED_REWRITE )
{
if ( CDB : : Rewrite ( strWalletFile , " \x04 pool " ) )
if ( dbw - > Rewrite ( " \x04 pool " ) )
{
LOCK ( cs_wallet ) ;
setKeyPool . clear ( ) ;
@ -2844,17 +2824,15 @@ DBErrors CWallet::LoadWallet(bool& fFirstRunRet)
@@ -2844,17 +2824,15 @@ DBErrors CWallet::LoadWallet(bool& fFirstRunRet)
DBErrors CWallet : : ZapSelectTx ( std : : vector < uint256 > & vHashIn , std : : vector < uint256 > & vHashOut )
{
if ( ! fFileBacked )
return DB_LOAD_OK ;
AssertLockHeld ( cs_wallet ) ; // mapWallet
vchDefaultKey = CPubKey ( ) ;
DBErrors nZapSelectTxRet = CWalletDB ( strWalletFile , " cr+ " ) . ZapSelectTx ( vHashIn , vHashOut ) ;
DBErrors nZapSelectTxRet = CWalletDB ( * dbw , " cr+ " ) . ZapSelectTx ( vHashIn , vHashOut ) ;
for ( uint256 hash : vHashOut )
mapWallet . erase ( hash ) ;
if ( nZapSelectTxRet = = DB_NEED_REWRITE )
{
if ( CDB : : Rewrite ( strWalletFile , " \x04 pool " ) )
if ( dbw - > Rewrite ( " \x04 pool " ) )
{
setKeyPool . clear ( ) ;
// Note: can't top-up keypool here, because wallet is locked.
@ -2874,13 +2852,11 @@ DBErrors CWallet::ZapSelectTx(std::vector<uint256>& vHashIn, std::vector<uint256
@@ -2874,13 +2852,11 @@ DBErrors CWallet::ZapSelectTx(std::vector<uint256>& vHashIn, std::vector<uint256
DBErrors CWallet : : ZapWalletTx ( std : : vector < CWalletTx > & vWtx )
{
if ( ! fFileBacked )
return DB_LOAD_OK ;
vchDefaultKey = CPubKey ( ) ;
DBErrors nZapWalletTxRet = CWalletDB ( strWalletFile , " cr+ " ) . ZapWalletTx ( vWtx ) ;
DBErrors nZapWalletTxRet = CWalletDB ( * dbw , " cr+ " ) . ZapWalletTx ( vWtx ) ;
if ( nZapWalletTxRet = = DB_NEED_REWRITE )
{
if ( CDB : : Rewrite ( strWalletFile , " \x04 pool " ) )
if ( dbw - > Rewrite ( " \x04 pool " ) )
{
LOCK ( cs_wallet ) ;
setKeyPool . clear ( ) ;
@ -2910,11 +2886,9 @@ bool CWallet::SetAddressBook(const CTxDestination& address, const std::string& s
@@ -2910,11 +2886,9 @@ bool CWallet::SetAddressBook(const CTxDestination& address, const std::string& s
}
NotifyAddressBookChanged ( this , address , strName , : : IsMine ( * this , address ) ! = ISMINE_NO ,
strPurpose , ( fUpdated ? CT_UPDATED : CT_NEW ) ) ;
if ( ! fFileBacked )
if ( ! strPurpose . empty ( ) & & ! CWalletDB ( * dbw ) . WritePurpose ( CBitcoinAddress ( address ) . ToString ( ) , strPurpose ) )
return false ;
if ( ! strPurpose . empty ( ) & & ! CWalletDB ( strWalletFile ) . WritePurpose ( CBitcoinAddress ( address ) . ToString ( ) , strPurpose ) )
return false ;
return CWalletDB ( strWalletFile ) . WriteName ( CBitcoinAddress ( address ) . ToString ( ) , strName ) ;
return CWalletDB ( * dbw ) . WriteName ( CBitcoinAddress ( address ) . ToString ( ) , strName ) ;
}
bool CWallet : : DelAddressBook ( const CTxDestination & address )
@ -2922,33 +2896,25 @@ bool CWallet::DelAddressBook(const CTxDestination& address)
@@ -2922,33 +2896,25 @@ bool CWallet::DelAddressBook(const CTxDestination& address)
{
LOCK ( cs_wallet ) ; // mapAddressBook
if ( fFileBacked )
{
// Delete destdata tuples associated with address
std : : string strAddress = CBitcoinAddress ( address ) . ToString ( ) ;
BOOST_FOREACH ( const PAIRTYPE ( std : : string , std : : string ) & item , mapAddressBook [ address ] . destdata )
{
CWalletDB ( strWalletFile ) . EraseDestData ( strAddress , item . first ) ;
}
CWalletDB ( * dbw ) . EraseDestData ( strAddress , item . first ) ;
}
mapAddressBook . erase ( address ) ;
}
NotifyAddressBookChanged ( this , address , " " , : : IsMine ( * this , address ) ! = ISMINE_NO , " " , CT_DELETED ) ;
if ( ! fFileBacked )
return false ;
CWalletDB ( strWalletFile ) . ErasePurpose ( CBitcoinAddress ( address ) . ToString ( ) ) ;
return CWalletDB ( strWalletFile ) . EraseName ( CBitcoinAddress ( address ) . ToString ( ) ) ;
CWalletDB ( * dbw ) . ErasePurpose ( CBitcoinAddress ( address ) . ToString ( ) ) ;
return CWalletDB ( * dbw ) . EraseName ( CBitcoinAddress ( address ) . ToString ( ) ) ;
}
bool CWallet : : SetDefaultKey ( const CPubKey & vchPubKey )
{
if ( fFileBacked )
{
if ( ! CWalletDB ( strWalletFile ) . WriteDefaultKey ( vchPubKey ) )
if ( ! CWalletDB ( * dbw ) . WriteDefaultKey ( vchPubKey ) )
return false ;
}
vchDefaultKey = vchPubKey ;
return true ;
}
@ -2961,7 +2927,7 @@ bool CWallet::NewKeyPool()
@@ -2961,7 +2927,7 @@ bool CWallet::NewKeyPool()
{
{
LOCK ( cs_wallet ) ;
CWalletDB walletdb ( strWalletFile ) ;
CWalletDB walletdb ( * dbw ) ;
BOOST_FOREACH ( int64_t nIndex , setKeyPool )
walletdb . ErasePool ( nIndex ) ;
setKeyPool . clear ( ) ;
@ -2982,7 +2948,7 @@ size_t CWallet::KeypoolCountExternalKeys()
@@ -2982,7 +2948,7 @@ size_t CWallet::KeypoolCountExternalKeys()
if ( ! IsHDEnabled ( ) | | ! CanSupportFeature ( FEATURE_HD_SPLIT ) )
return setKeyPool . size ( ) ;
CWalletDB walletdb ( strWalletFile ) ;
CWalletDB walletdb ( * dbw ) ;
// count amount of external keys
size_t amountE = 0 ;
@ -3025,7 +2991,7 @@ bool CWallet::TopUpKeyPool(unsigned int kpSize)
@@ -3025,7 +2991,7 @@ bool CWallet::TopUpKeyPool(unsigned int kpSize)
missingInternal = 0 ;
}
bool internal = false ;
CWalletDB walletdb ( strWalletFile ) ;
CWalletDB walletdb ( * dbw ) ;
for ( int64_t i = missingInternal + missingExternal ; i - - ; )
{
int64_t nEnd = 1 ;
@ -3056,7 +3022,7 @@ void CWallet::ReserveKeyFromKeyPool(int64_t& nIndex, CKeyPool& keypool, bool int
@@ -3056,7 +3022,7 @@ void CWallet::ReserveKeyFromKeyPool(int64_t& nIndex, CKeyPool& keypool, bool int
if ( setKeyPool . empty ( ) )
return ;
CWalletDB walletdb ( strWalletFile ) ;
CWalletDB walletdb ( * dbw ) ;
// try to find a key that matches the internal/external filter
for ( const int64_t & id : setKeyPool )
@ -3082,11 +3048,8 @@ void CWallet::ReserveKeyFromKeyPool(int64_t& nIndex, CKeyPool& keypool, bool int
@@ -3082,11 +3048,8 @@ void CWallet::ReserveKeyFromKeyPool(int64_t& nIndex, CKeyPool& keypool, bool int
void CWallet : : KeepKey ( int64_t nIndex )
{
// Remove from key pool
if ( fFileBacked )
{
CWalletDB walletdb ( strWalletFile ) ;
CWalletDB walletdb ( * dbw ) ;
walletdb . ErasePool ( nIndex ) ;
}
LogPrintf ( " keypool keep %d \n " , nIndex ) ;
}
@ -3128,7 +3091,7 @@ int64_t CWallet::GetOldestKeyPoolTime()
@@ -3128,7 +3091,7 @@ int64_t CWallet::GetOldestKeyPoolTime()
return GetTime ( ) ;
CKeyPool keypool ;
CWalletDB walletdb ( strWalletFile ) ;
CWalletDB walletdb ( * dbw ) ;
if ( IsHDEnabled ( ) & & CanSupportFeature ( FEATURE_HD_SPLIT ) )
{
@ -3296,7 +3259,7 @@ std::set< std::set<CTxDestination> > CWallet::GetAddressGroupings()
@@ -3296,7 +3259,7 @@ std::set< std::set<CTxDestination> > CWallet::GetAddressGroupings()
CAmount CWallet : : GetAccountBalance ( const std : : string & strAccount , int nMinDepth , const isminefilter & filter )
{
CWalletDB walletdb ( strWalletFile ) ;
CWalletDB walletdb ( * dbw ) ;
return GetAccountBalance ( walletdb , strAccount , nMinDepth , filter ) ;
}
@ -3376,7 +3339,7 @@ void CWallet::GetAllReserveKeys(std::set<CKeyID>& setAddress) const
@@ -3376,7 +3339,7 @@ void CWallet::GetAllReserveKeys(std::set<CKeyID>& setAddress) const
{
setAddress . clear ( ) ;
CWalletDB walletdb ( strWalletFile ) ;
CWalletDB walletdb ( * dbw ) ;
LOCK2 ( cs_main , cs_wallet ) ;
BOOST_FOREACH ( const int64_t & id , setKeyPool )
@ -3598,18 +3561,14 @@ bool CWallet::AddDestData(const CTxDestination &dest, const std::string &key, co
@@ -3598,18 +3561,14 @@ bool CWallet::AddDestData(const CTxDestination &dest, const std::string &key, co
return false ;
mapAddressBook [ dest ] . destdata . insert ( std : : make_pair ( key , value ) ) ;
if ( ! fFileBacked )
return true ;
return CWalletDB ( strWalletFile ) . WriteDestData ( CBitcoinAddress ( dest ) . ToString ( ) , key , value ) ;
return CWalletDB ( * dbw ) . WriteDestData ( CBitcoinAddress ( dest ) . ToString ( ) , key , value ) ;
}
bool CWallet : : EraseDestData ( const CTxDestination & dest , const std : : string & key )
{
if ( ! mapAddressBook [ dest ] . destdata . erase ( key ) )
return false ;
if ( ! fFileBacked )
return true ;
return CWalletDB ( strWalletFile ) . EraseDestData ( CBitcoinAddress ( dest ) . ToString ( ) , key ) ;
return CWalletDB ( * dbw ) . EraseDestData ( CBitcoinAddress ( dest ) . ToString ( ) , key ) ;
}
bool CWallet : : LoadDestData ( const CTxDestination & dest , const std : : string & key , const std : : string & value )
@ -3679,7 +3638,8 @@ CWallet* CWallet::CreateWalletFromFile(const std::string walletFile)
@@ -3679,7 +3638,8 @@ CWallet* CWallet::CreateWalletFromFile(const std::string walletFile)
if ( GetBoolArg ( " -zapwallettxes " , false ) ) {
uiInterface . InitMessage ( _ ( " Zapping all transactions from wallet... " ) ) ;
CWallet * tempWallet = new CWallet ( walletFile ) ;
std : : unique_ptr < CWalletDBWrapper > dbw ( new CWalletDBWrapper ( & bitdb , walletFile ) ) ;
CWallet * tempWallet = new CWallet ( std : : move ( dbw ) ) ;
DBErrors nZapWalletRet = tempWallet - > ZapWalletTx ( vWtx ) ;
if ( nZapWalletRet ! = DB_LOAD_OK ) {
InitError ( strprintf ( _ ( " Error loading %s: Wallet corrupted " ) , walletFile ) ) ;
@ -3694,7 +3654,8 @@ CWallet* CWallet::CreateWalletFromFile(const std::string walletFile)
@@ -3694,7 +3654,8 @@ CWallet* CWallet::CreateWalletFromFile(const std::string walletFile)
int64_t nStart = GetTimeMillis ( ) ;
bool fFirstRun = true ;
CWallet * walletInstance = new CWallet ( walletFile ) ;
std : : unique_ptr < CWalletDBWrapper > dbw ( new CWalletDBWrapper ( & bitdb , walletFile ) ) ;
CWallet * walletInstance = new CWallet ( std : : move ( dbw ) ) ;
DBErrors nLoadWalletRet = walletInstance - > LoadWallet ( fFirstRun ) ;
if ( nLoadWalletRet ! = DB_LOAD_OK )
{
@ -3785,7 +3746,7 @@ CWallet* CWallet::CreateWalletFromFile(const std::string walletFile)
@@ -3785,7 +3746,7 @@ CWallet* CWallet::CreateWalletFromFile(const std::string walletFile)
CBlockIndex * pindexRescan = chainActive . Genesis ( ) ;
if ( ! GetBoolArg ( " -rescan " , false ) )
{
CWalletDB walletdb ( walletFile ) ;
CWalletDB walletdb ( * walletInstance - > dbw ) ;
CBlockLocator locator ;
if ( walletdb . ReadBestBlock ( locator ) )
pindexRescan = FindForkInGlobalIndex ( chainActive , locator ) ;
@ -3818,7 +3779,7 @@ CWallet* CWallet::CreateWalletFromFile(const std::string walletFile)
@@ -3818,7 +3779,7 @@ CWallet* CWallet::CreateWalletFromFile(const std::string walletFile)
// Restore wallet transaction metadata after -zapwallettxes=1
if ( GetBoolArg ( " -zapwallettxes " , false ) & & GetArg ( " -zapwallettxes " , " 1 " ) ! = " 2 " )
{
CWalletDB walletdb ( walletFile ) ;
CWalletDB walletdb ( * walletInstance - > dbw ) ;
BOOST_FOREACH ( const CWalletTx & wtxOld , vWtx )
{
@ -3978,38 +3939,7 @@ bool CWallet::ParameterInteraction()
@@ -3978,38 +3939,7 @@ bool CWallet::ParameterInteraction()
bool CWallet : : BackupWallet ( const std : : string & strDest )
{
if ( ! fFileBacked )
return false ;
while ( true )
{
{
LOCK ( bitdb . cs_db ) ;
if ( ! bitdb . mapFileUseCount . count ( strWalletFile ) | | bitdb . mapFileUseCount [ strWalletFile ] = = 0 )
{
// Flush log data to the dat file
bitdb . CloseDb ( strWalletFile ) ;
bitdb . CheckpointLSN ( strWalletFile ) ;
bitdb . mapFileUseCount . erase ( strWalletFile ) ;
// Copy wallet file
fs : : path pathSrc = GetDataDir ( ) / strWalletFile ;
fs : : path pathDest ( strDest ) ;
if ( fs : : is_directory ( pathDest ) )
pathDest / = strWalletFile ;
try {
fs : : copy_file ( pathSrc , pathDest , fs : : copy_option : : overwrite_if_exists ) ;
LogPrintf ( " copied %s to %s \n " , strWalletFile , pathDest . string ( ) ) ;
return true ;
} catch ( const fs : : filesystem_error & e ) {
LogPrintf ( " error copying %s to %s - %s \n " , strWalletFile , pathDest . string ( ) , e . what ( ) ) ;
return false ;
}
}
}
MilliSleep ( 100 ) ;
}
return false ;
return dbw - > Backup ( strDest ) ;
}
CKeyPool : : CKeyPool ( )