mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-01-20 07:09:15 +01:00
Allow the default key to be unavailable
This solves the issue where no default key can be added after -salvagewallet.
This commit is contained in:
committed by
Pieter Wuille
parent
77a1e12eed
commit
360cfe142c
@@ -457,17 +457,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(), "");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1199,8 +1201,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
|
||||
@@ -1737,7 +1739,7 @@ set< set<CTxDestination> > CWallet::GetAddressGroupings()
|
||||
return ret;
|
||||
}
|
||||
|
||||
CPubKey CReserveKey::GetReservedKey()
|
||||
bool CReserveKey::GetReservedKey(CPubKey& pubkey)
|
||||
{
|
||||
if (nIndex == -1)
|
||||
{
|
||||
@@ -1745,14 +1747,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()
|
||||
|
||||
Reference in New Issue
Block a user