Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 30 additions & 10 deletions rpc.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -315,15 +315,9 @@ Value getnewaddress(const Array& params, bool fHelp)
}


Value getaccountaddress(const Array& params, bool fHelp)
string GetAccountAddress(string strAccount, bool bForceNew=false)
{
if (fHelp || params.size() != 1)
throw runtime_error(
"getaccountaddress <account>\n"
"Returns the current bitcoin address for receiving payments to this account.");

// Parse the account first so we don't generate a key if there's an error
string strAccount = AccountFromValue(params[0]);
string strAddress;

CRITICAL_BLOCK(cs_mapWallet)
{
Expand All @@ -350,7 +344,7 @@ Value getaccountaddress(const Array& params, bool fHelp)
}

// Generate a new key
if (account.vchPubKey.empty())
if (account.vchPubKey.empty() || bForceNew)
{
account.vchPubKey = GetKeyFromKeyPool();
string strAddress = PubKeyToAddress(account.vchPubKey);
Expand All @@ -359,11 +353,26 @@ Value getaccountaddress(const Array& params, bool fHelp)
}

walletdb.TxnCommit();
return PubKeyToAddress(account.vchPubKey);
strAddress = PubKeyToAddress(account.vchPubKey);
}
return strAddress;
}

Value getaccountaddress(const Array& params, bool fHelp)
{
if (fHelp || params.size() != 1)
throw runtime_error(
"getaccountaddress <account>\n"
"Returns the current bitcoin address for receiving payments to this account.");

// Parse the account first so we don't generate a key if there's an error
string strAccount = AccountFromValue(params[0]);

return GetAccountAddress(strAccount);
}



Value setaccount(const Array& params, bool fHelp)
{
if (fHelp || params.size() < 1 || params.size() > 2)
Expand All @@ -376,6 +385,17 @@ Value setaccount(const Array& params, bool fHelp)
if (params.size() > 1)
strAccount = AccountFromValue(params[1]);

// Detect when changing the account of an address that is the 'unused current key' of another account:
CRITICAL_BLOCK(cs_mapAddressBook)
{
if (mapAddressBook.count(strAddress))
{
string strOldAccount = mapAddressBook[strAddress];
if (strAddress == GetAccountAddress(strOldAccount))
GetAccountAddress(strOldAccount, true);
}
}

SetAddressBookName(strAddress, strAccount);
return Value::null;
}
Expand Down