aboutsummaryrefslogtreecommitdiff
path: root/src/wallet.cpp
diff options
context:
space:
mode:
authorGavin Andresen <gavinandresen@gmail.com>2013-05-03 14:33:02 -0700
committerGavin Andresen <gavinandresen@gmail.com>2013-05-03 14:33:02 -0700
commit61a845dcb6528bc9b04272f73d4d5681be858a6f (patch)
tree48cd87c19d675e00bd328d682f033acff54e57ae /src/wallet.cpp
parentaa62b2c43390d2a5f2b8cdc5b0674b6798d60c29 (diff)
parent360cfe142c552ac5c4d904a1e970390188151ca8 (diff)
downloadbitcoin-61a845dcb6528bc9b04272f73d4d5681be858a6f.tar.xz
Merge pull request #2566 from sipa/nodef
Allow the default key to be unavailable
Diffstat (limited to 'src/wallet.cpp')
-rw-r--r--src/wallet.cpp39
1 files changed, 22 insertions, 17 deletions
diff --git a/src/wallet.cpp b/src/wallet.cpp
index 9658dab678..a56d53e7e3 100644
--- a/src/wallet.cpp
+++ b/src/wallet.cpp
@@ -462,17 +462,19 @@ bool CWallet::AddToWallet(const CWalletTx& wtxIn)
return false;
#ifndef QT_GUI
// If default receiving address gets used, replace it with a new one
- CScript scriptDefaultKey;
- scriptDefaultKey.SetDestination(vchDefaultKey.GetID());
- BOOST_FOREACH(const CTxOut& txout, wtx.vout)
- {
- if (txout.scriptPubKey == scriptDefaultKey)
+ if (vchDefaultKey.IsValid()) {
+ CScript scriptDefaultKey;
+ scriptDefaultKey.SetDestination(vchDefaultKey.GetID());
+ BOOST_FOREACH(const CTxOut& txout, wtx.vout)
{
- CPubKey newDefaultKey;
- if (GetKeyFromPool(newDefaultKey, false))
+ if (txout.scriptPubKey == scriptDefaultKey)
{
- SetDefaultKey(newDefaultKey);
- SetAddressBookName(vchDefaultKey.GetID(), "");
+ CPubKey newDefaultKey;
+ if (GetKeyFromPool(newDefaultKey, false))
+ {
+ SetDefaultKey(newDefaultKey);
+ SetAddressBookName(vchDefaultKey.GetID(), "");
+ }
}
}
}
@@ -1204,8 +1206,8 @@ bool CWallet::CreateTransaction(const vector<pair<CScript, int64> >& vecSend, CW
// post-backup change.
// Reserve a new key pair from key pool
- CPubKey vchPubKey = reservekey.GetReservedKey();
- // assert(mapKeys.count(vchPubKey));
+ CPubKey vchPubKey;
+ assert(reservekey.GetReservedKey(vchPubKey)); // should never fail, as we just unlocked
// Fill a vout to ourself
// TODO: pass in scriptChange instead of reservekey so
@@ -1742,7 +1744,7 @@ set< set<CTxDestination> > CWallet::GetAddressGroupings()
return ret;
}
-CPubKey CReserveKey::GetReservedKey()
+bool CReserveKey::GetReservedKey(CPubKey& pubkey)
{
if (nIndex == -1)
{
@@ -1750,14 +1752,17 @@ CPubKey CReserveKey::GetReservedKey()
pwallet->ReserveKeyFromKeyPool(nIndex, keypool);
if (nIndex != -1)
vchPubKey = keypool.vchPubKey;
- else
- {
- printf("CReserveKey::GetReservedKey(): Warning: Using default key instead of a new key, top up your keypool!");
- vchPubKey = pwallet->vchDefaultKey;
+ else {
+ if (pwallet->vchDefaultKey.IsValid()) {
+ printf("CReserveKey::GetReservedKey(): Warning: Using default key instead of a new key, top up your keypool!");
+ vchPubKey = pwallet->vchDefaultKey;
+ } else
+ return false;
}
}
assert(vchPubKey.IsValid());
- return vchPubKey;
+ pubkey = vchPubKey;
+ return true;
}
void CReserveKey::KeepKey()