@ -35,6 +35,7 @@ struct CompareValueOnly
CPubKey CWallet : : GenerateNewKey ( )
CPubKey CWallet : : GenerateNewKey ( )
{
{
AssertLockHeld ( cs_wallet ) ; // mapKeyMetadata
bool fCompressed = CanSupportFeature ( FEATURE_COMPRPUBKEY ) ; // default to compressed public keys if we want 0.6.0 wallets
bool fCompressed = CanSupportFeature ( FEATURE_COMPRPUBKEY ) ; // default to compressed public keys if we want 0.6.0 wallets
RandAddSeedPerfmon ( ) ;
RandAddSeedPerfmon ( ) ;
@ -60,6 +61,7 @@ CPubKey CWallet::GenerateNewKey()
bool CWallet : : AddKeyPubKey ( const CKey & secret , const CPubKey & pubkey )
bool CWallet : : AddKeyPubKey ( const CKey & secret , const CPubKey & pubkey )
{
{
AssertLockHeld ( cs_wallet ) ; // mapKeyMetadata
if ( ! CCryptoKeyStore : : AddKeyPubKey ( secret , pubkey ) )
if ( ! CCryptoKeyStore : : AddKeyPubKey ( secret , pubkey ) )
return false ;
return false ;
if ( ! fFileBacked )
if ( ! fFileBacked )
@ -95,6 +97,7 @@ bool CWallet::AddCryptedKey(const CPubKey &vchPubKey,
bool CWallet : : LoadKeyMetadata ( const CPubKey & pubkey , const CKeyMetadata & meta )
bool CWallet : : LoadKeyMetadata ( const CPubKey & pubkey , const CKeyMetadata & meta )
{
{
AssertLockHeld ( cs_wallet ) ; // mapKeyMetadata
if ( meta . nCreateTime & & ( ! nTimeFirstKey | | meta . nCreateTime < nTimeFirstKey ) )
if ( meta . nCreateTime & & ( ! nTimeFirstKey | | meta . nCreateTime < nTimeFirstKey ) )
nTimeFirstKey = meta . nCreateTime ;
nTimeFirstKey = meta . nCreateTime ;
@ -202,6 +205,7 @@ public:
bool CWallet : : SetMinVersion ( enum WalletFeature nVersion , CWalletDB * pwalletdbIn , bool fExplicit )
bool CWallet : : SetMinVersion ( enum WalletFeature nVersion , CWalletDB * pwalletdbIn , bool fExplicit )
{
{
AssertLockHeld ( cs_wallet ) ; // nWalletVersion
if ( nWalletVersion > = nVersion )
if ( nWalletVersion > = nVersion )
return true ;
return true ;
@ -235,6 +239,7 @@ bool CWallet::SetMinVersion(enum WalletFeature nVersion, CWalletDB* pwalletdbIn,
bool CWallet : : SetMaxVersion ( int nVersion )
bool CWallet : : SetMaxVersion ( int nVersion )
{
{
AssertLockHeld ( cs_wallet ) ; // nWalletVersion, nWalletMaxVersion
// cannot downgrade below current version
// cannot downgrade below current version
if ( nWalletVersion > nVersion )
if ( nWalletVersion > nVersion )
return false ;
return false ;
@ -327,6 +332,7 @@ bool CWallet::EncryptWallet(const SecureString& strWalletPassphrase)
int64_t CWallet : : IncOrderPosNext ( CWalletDB * pwalletdb )
int64_t CWallet : : IncOrderPosNext ( CWalletDB * pwalletdb )
{
{
AssertLockHeld ( cs_wallet ) ; // nOrderPosNext
int64_t nRet = nOrderPosNext + + ;
int64_t nRet = nOrderPosNext + + ;
if ( pwalletdb ) {
if ( pwalletdb ) {
pwalletdb - > WriteOrderPosNext ( nOrderPosNext ) ;
pwalletdb - > WriteOrderPosNext ( nOrderPosNext ) ;
@ -338,6 +344,7 @@ int64_t CWallet::IncOrderPosNext(CWalletDB *pwalletdb)
CWallet : : TxItems CWallet : : OrderedTxItems ( std : : list < CAccountingEntry > & acentries , std : : string strAccount )
CWallet : : TxItems CWallet : : OrderedTxItems ( std : : list < CAccountingEntry > & acentries , std : : string strAccount )
{
{
AssertLockHeld ( cs_wallet ) ; // mapWallet
CWalletDB walletdb ( strWalletFile ) ;
CWalletDB walletdb ( strWalletFile ) ;
// First: get all CWalletTx and CAccountingEntry into a sorted-by-order multimap.
// First: get all CWalletTx and CAccountingEntry into a sorted-by-order multimap.
@ -1492,6 +1499,7 @@ DBErrors CWallet::LoadWallet(bool& fFirstRunRet)
{
{
if ( CDB : : Rewrite ( strWalletFile , " \x04 pool " ) )
if ( CDB : : Rewrite ( strWalletFile , " \x04 pool " ) )
{
{
LOCK ( cs_wallet ) ;
setKeyPool . clear ( ) ;
setKeyPool . clear ( ) ;
// Note: can't top-up keypool here, because wallet is locked.
// Note: can't top-up keypool here, because wallet is locked.
// User will be prompted to unlock wallet the next operation
// User will be prompted to unlock wallet the next operation
@ -1509,6 +1517,7 @@ DBErrors CWallet::LoadWallet(bool& fFirstRunRet)
bool CWallet : : SetAddressBook ( const CTxDestination & address , const string & strName , const string & strPurpose )
bool CWallet : : SetAddressBook ( const CTxDestination & address , const string & strName , const string & strPurpose )
{
{
AssertLockHeld ( cs_wallet ) ; // mapAddressBook
std : : map < CTxDestination , CAddressBookData > : : iterator mi = mapAddressBook . find ( address ) ;
std : : map < CTxDestination , CAddressBookData > : : iterator mi = mapAddressBook . find ( address ) ;
mapAddressBook [ address ] . name = strName ;
mapAddressBook [ address ] . name = strName ;
if ( ! strPurpose . empty ( ) ) /* update purpose only if requested */
if ( ! strPurpose . empty ( ) ) /* update purpose only if requested */
@ -1525,6 +1534,7 @@ bool CWallet::SetAddressBook(const CTxDestination& address, const string& strNam
bool CWallet : : DelAddressBook ( const CTxDestination & address )
bool CWallet : : DelAddressBook ( const CTxDestination & address )
{
{
AssertLockHeld ( cs_wallet ) ; // mapAddressBook
mapAddressBook . erase ( address ) ;
mapAddressBook . erase ( address ) ;
NotifyAddressBookChanged ( this , address , " " , : : IsMine ( * this , address ) , " " , CT_DELETED ) ;
NotifyAddressBookChanged ( this , address , " " , : : IsMine ( * this , address ) , " " , CT_DELETED ) ;
if ( ! fFileBacked )
if ( ! fFileBacked )
@ -1738,6 +1748,7 @@ std::map<CTxDestination, int64_t> CWallet::GetAddressBalances()
set < set < CTxDestination > > CWallet : : GetAddressGroupings ( )
set < set < CTxDestination > > CWallet : : GetAddressGroupings ( )
{
{
AssertLockHeld ( cs_wallet ) ; // mapWallet
set < set < CTxDestination > > groupings ;
set < set < CTxDestination > > groupings ;
set < CTxDestination > grouping ;
set < CTxDestination > grouping ;
@ -1830,6 +1841,7 @@ set< set<CTxDestination> > CWallet::GetAddressGroupings()
set < CTxDestination > CWallet : : GetAccountAddresses ( string strAccount ) const
set < CTxDestination > CWallet : : GetAccountAddresses ( string strAccount ) const
{
{
AssertLockHeld ( cs_wallet ) ; // mapWallet
set < CTxDestination > result ;
set < CTxDestination > result ;
BOOST_FOREACH ( const PAIRTYPE ( CTxDestination , CAddressBookData ) & item , mapAddressBook )
BOOST_FOREACH ( const PAIRTYPE ( CTxDestination , CAddressBookData ) & item , mapAddressBook )
{
{
@ -1911,21 +1923,25 @@ void CWallet::UpdatedTransaction(const uint256 &hashTx)
void CWallet : : LockCoin ( COutPoint & output )
void CWallet : : LockCoin ( COutPoint & output )
{
{
AssertLockHeld ( cs_wallet ) ; // setLockedCoins
setLockedCoins . insert ( output ) ;
setLockedCoins . insert ( output ) ;
}
}
void CWallet : : UnlockCoin ( COutPoint & output )
void CWallet : : UnlockCoin ( COutPoint & output )
{
{
AssertLockHeld ( cs_wallet ) ; // setLockedCoins
setLockedCoins . erase ( output ) ;
setLockedCoins . erase ( output ) ;
}
}
void CWallet : : UnlockAllCoins ( )
void CWallet : : UnlockAllCoins ( )
{
{
AssertLockHeld ( cs_wallet ) ; // setLockedCoins
setLockedCoins . clear ( ) ;
setLockedCoins . clear ( ) ;
}
}
bool CWallet : : IsLockedCoin ( uint256 hash , unsigned int n ) const
bool CWallet : : IsLockedCoin ( uint256 hash , unsigned int n ) const
{
{
AssertLockHeld ( cs_wallet ) ; // setLockedCoins
COutPoint outpt ( hash , n ) ;
COutPoint outpt ( hash , n ) ;
return ( setLockedCoins . count ( outpt ) > 0 ) ;
return ( setLockedCoins . count ( outpt ) > 0 ) ;
@ -1933,6 +1949,7 @@ bool CWallet::IsLockedCoin(uint256 hash, unsigned int n) const
void CWallet : : ListLockedCoins ( std : : vector < COutPoint > & vOutpts )
void CWallet : : ListLockedCoins ( std : : vector < COutPoint > & vOutpts )
{
{
AssertLockHeld ( cs_wallet ) ; // setLockedCoins
for ( std : : set < COutPoint > : : iterator it = setLockedCoins . begin ( ) ;
for ( std : : set < COutPoint > : : iterator it = setLockedCoins . begin ( ) ;
it ! = setLockedCoins . end ( ) ; it + + ) {
it ! = setLockedCoins . end ( ) ; it + + ) {
COutPoint outpt = ( * it ) ;
COutPoint outpt = ( * it ) ;
@ -1941,6 +1958,7 @@ void CWallet::ListLockedCoins(std::vector<COutPoint>& vOutpts)
}
}
void CWallet : : GetKeyBirthTimes ( std : : map < CKeyID , int64_t > & mapKeyBirth ) const {
void CWallet : : GetKeyBirthTimes ( std : : map < CKeyID , int64_t > & mapKeyBirth ) const {
AssertLockHeld ( cs_wallet ) ; // mapKeyMetadata
mapKeyBirth . clear ( ) ;
mapKeyBirth . clear ( ) ;
// get birth times for keys with metadata
// get birth times for keys with metadata