mirror of
https://github.com/dashpay/dash.git
synced 2024-12-27 21:12:48 +01:00
Improve CWallet API with new GetAccountPubkey function.
Remove one more caller that is passing CWalletDB.
This commit is contained in:
parent
243ac0c75b
commit
152ab236ea
@ -146,38 +146,12 @@ UniValue getnewaddress(const UniValue& params, bool fHelp)
|
|||||||
|
|
||||||
CBitcoinAddress GetAccountAddress(string strAccount, bool bForceNew=false)
|
CBitcoinAddress GetAccountAddress(string strAccount, bool bForceNew=false)
|
||||||
{
|
{
|
||||||
CWalletDB walletdb(pwalletMain->strWalletFile);
|
CPubKey pubKey;
|
||||||
|
if (!pwalletMain->GetAccountPubkey(pubKey, strAccount, bForceNew)) {
|
||||||
CAccount account;
|
throw JSONRPCError(RPC_WALLET_KEYPOOL_RAN_OUT, "Error: Keypool ran out, please call keypoolrefill first");
|
||||||
walletdb.ReadAccount(strAccount, account);
|
|
||||||
|
|
||||||
if (!bForceNew) {
|
|
||||||
if (!account.vchPubKey.IsValid())
|
|
||||||
bForceNew = true;
|
|
||||||
else {
|
|
||||||
// Check if the current key has been used
|
|
||||||
CScript scriptPubKey = GetScriptForDestination(account.vchPubKey.GetID());
|
|
||||||
for (map<uint256, CWalletTx>::iterator it = pwalletMain->mapWallet.begin();
|
|
||||||
it != pwalletMain->mapWallet.end() && account.vchPubKey.IsValid();
|
|
||||||
++it)
|
|
||||||
BOOST_FOREACH(const CTxOut& txout, (*it).second.vout)
|
|
||||||
if (txout.scriptPubKey == scriptPubKey) {
|
|
||||||
bForceNew = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Generate a new key
|
return CBitcoinAddress(pubKey.GetID());
|
||||||
if (bForceNew) {
|
|
||||||
if (!pwalletMain->GetKeyFromPool(account.vchPubKey))
|
|
||||||
throw JSONRPCError(RPC_WALLET_KEYPOOL_RAN_OUT, "Error: Keypool ran out, please call keypoolrefill first");
|
|
||||||
|
|
||||||
pwalletMain->SetAddressBook(account.vchPubKey.GetID(), strAccount, "receive");
|
|
||||||
walletdb.WriteAccount(strAccount, account);
|
|
||||||
}
|
|
||||||
|
|
||||||
return CBitcoinAddress(account.vchPubKey.GetID());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
UniValue getaccountaddress(const UniValue& params, bool fHelp)
|
UniValue getaccountaddress(const UniValue& params, bool fHelp)
|
||||||
|
@ -640,6 +640,44 @@ bool CWallet::AccountMove(std::string strFrom, std::string strTo, CAmount nAmoun
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool CWallet::GetAccountPubkey(CPubKey &pubKey, std::string strAccount, bool bForceNew)
|
||||||
|
{
|
||||||
|
CWalletDB walletdb(strWalletFile);
|
||||||
|
|
||||||
|
CAccount account;
|
||||||
|
walletdb.ReadAccount(strAccount, account);
|
||||||
|
|
||||||
|
if (!bForceNew) {
|
||||||
|
if (!account.vchPubKey.IsValid())
|
||||||
|
bForceNew = true;
|
||||||
|
else {
|
||||||
|
// Check if the current key has been used
|
||||||
|
CScript scriptPubKey = GetScriptForDestination(account.vchPubKey.GetID());
|
||||||
|
for (map<uint256, CWalletTx>::iterator it = mapWallet.begin();
|
||||||
|
it != mapWallet.end() && account.vchPubKey.IsValid();
|
||||||
|
++it)
|
||||||
|
BOOST_FOREACH(const CTxOut& txout, (*it).second.vout)
|
||||||
|
if (txout.scriptPubKey == scriptPubKey) {
|
||||||
|
bForceNew = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Generate a new key
|
||||||
|
if (bForceNew) {
|
||||||
|
if (!GetKeyFromPool(account.vchPubKey))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
SetAddressBook(account.vchPubKey.GetID(), strAccount, "receive");
|
||||||
|
walletdb.WriteAccount(strAccount, account);
|
||||||
|
}
|
||||||
|
|
||||||
|
pubKey = account.vchPubKey;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
void CWallet::MarkDirty()
|
void CWallet::MarkDirty()
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
|
@ -719,6 +719,7 @@ public:
|
|||||||
*/
|
*/
|
||||||
int64_t IncOrderPosNext(CWalletDB *pwalletdb = NULL);
|
int64_t IncOrderPosNext(CWalletDB *pwalletdb = NULL);
|
||||||
bool AccountMove(std::string strFrom, std::string strTo, CAmount nAmount, std::string strComment = "");
|
bool AccountMove(std::string strFrom, std::string strTo, CAmount nAmount, std::string strComment = "");
|
||||||
|
bool GetAccountPubkey(CPubKey &pubKey, std::string strAccount, bool bForceNew = false);
|
||||||
|
|
||||||
void MarkDirty();
|
void MarkDirty();
|
||||||
bool AddToWallet(const CWalletTx& wtxIn, bool fFromLoadWallet, CWalletDB* pwalletdb);
|
bool AddToWallet(const CWalletTx& wtxIn, bool fFromLoadWallet, CWalletDB* pwalletdb);
|
||||||
|
Loading…
Reference in New Issue
Block a user