|
|
@ -3,6 +3,8 @@ |
|
|
|
// Distributed under the MIT/X11 software license, see the accompanying
|
|
|
|
// file license.txt or http://www.opensource.org/licenses/mit-license.php.
|
|
|
|
|
|
|
|
#include <stdint.h> |
|
|
|
|
|
|
|
#include "headers.h" |
|
|
|
#include "db.h" |
|
|
|
#include "crypter.h" |
|
|
@ -90,7 +92,7 @@ bool CWallet::ChangeWalletPassphrase(const SecureString& strOldWalletPassphrase, |
|
|
|
return false; |
|
|
|
if (CCryptoKeyStore::Unlock(vMasterKey)) |
|
|
|
{ |
|
|
|
int64 nStartTime = GetTimeMillis(); |
|
|
|
int64_t nStartTime = GetTimeMillis(); |
|
|
|
crypter.SetKeyFromPassphrase(strNewWalletPassphrase, pMasterKey.second.vchSalt, pMasterKey.second.nDeriveIterations, pMasterKey.second.nDerivationMethod); |
|
|
|
pMasterKey.second.nDeriveIterations = pMasterKey.second.nDeriveIterations * (100 / ((double)(GetTimeMillis() - nStartTime))); |
|
|
|
|
|
|
@ -149,7 +151,7 @@ bool CWallet::EncryptWallet(const SecureString& strWalletPassphrase) |
|
|
|
RAND_bytes(&kMasterKey.vchSalt[0], WALLET_CRYPTO_SALT_SIZE); |
|
|
|
|
|
|
|
CCrypter crypter; |
|
|
|
int64 nStartTime = GetTimeMillis(); |
|
|
|
int64_t nStartTime = GetTimeMillis(); |
|
|
|
crypter.SetKeyFromPassphrase(strWalletPassphrase, kMasterKey.vchSalt, 25000, kMasterKey.nDerivationMethod); |
|
|
|
kMasterKey.nDeriveIterations = 2500000 / ((double)(GetTimeMillis() - nStartTime)); |
|
|
|
|
|
|
@ -367,7 +369,7 @@ bool CWallet::IsMine(const CTxIn &txin) const |
|
|
|
return false; |
|
|
|
} |
|
|
|
|
|
|
|
int64 CWallet::GetDebit(const CTxIn &txin) const |
|
|
|
int64_t CWallet::GetDebit(const CTxIn &txin) const |
|
|
|
{ |
|
|
|
CRITICAL_BLOCK(cs_wallet) |
|
|
|
{ |
|
|
@ -401,7 +403,7 @@ bool CWallet::IsChange(const CTxOut& txout) const |
|
|
|
return false; |
|
|
|
} |
|
|
|
|
|
|
|
int64 CWalletTx::GetTxTime() const |
|
|
|
int64_t CWalletTx::GetTxTime() const |
|
|
|
{ |
|
|
|
return nTimeReceived; |
|
|
|
} |
|
|
@ -445,8 +447,8 @@ int CWalletTx::GetRequestCount() const |
|
|
|
return nRequests; |
|
|
|
} |
|
|
|
|
|
|
|
void CWalletTx::GetAmounts(int64& nGeneratedImmature, int64& nGeneratedMature, list<pair<CBitcoinAddress, int64> >& listReceived, |
|
|
|
list<pair<CBitcoinAddress, int64> >& listSent, int64& nFee, string& strSentAccount) const |
|
|
|
void CWalletTx::GetAmounts(int64_t& nGeneratedImmature, int64_t& nGeneratedMature, list<pair<CBitcoinAddress, int64_t> >& listReceived, |
|
|
|
list<pair<CBitcoinAddress, int64_t> >& listSent, int64_t& nFee, string& strSentAccount) const |
|
|
|
{ |
|
|
|
nGeneratedImmature = nGeneratedMature = nFee = 0; |
|
|
|
listReceived.clear(); |
|
|
@ -463,10 +465,10 @@ void CWalletTx::GetAmounts(int64& nGeneratedImmature, int64& nGeneratedMature, l |
|
|
|
} |
|
|
|
|
|
|
|
// Compute fee:
|
|
|
|
int64 nDebit = GetDebit(); |
|
|
|
int64_t nDebit = GetDebit(); |
|
|
|
if (nDebit > 0) // debit>0 means we signed/sent this transaction
|
|
|
|
{ |
|
|
|
int64 nValueOut = GetValueOut(); |
|
|
|
int64_t nValueOut = GetValueOut(); |
|
|
|
nFee = nDebit - nValueOut; |
|
|
|
} |
|
|
|
|
|
|
@ -495,29 +497,29 @@ void CWalletTx::GetAmounts(int64& nGeneratedImmature, int64& nGeneratedMature, l |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
void CWalletTx::GetAccountAmounts(const string& strAccount, int64& nGenerated, int64& nReceived, |
|
|
|
int64& nSent, int64& nFee) const |
|
|
|
void CWalletTx::GetAccountAmounts(const string& strAccount, int64_t& nGenerated, int64_t& nReceived, |
|
|
|
int64_t& nSent, int64_t& nFee) const |
|
|
|
{ |
|
|
|
nGenerated = nReceived = nSent = nFee = 0; |
|
|
|
|
|
|
|
int64 allGeneratedImmature, allGeneratedMature, allFee; |
|
|
|
int64_t allGeneratedImmature, allGeneratedMature, allFee; |
|
|
|
allGeneratedImmature = allGeneratedMature = allFee = 0; |
|
|
|
string strSentAccount; |
|
|
|
list<pair<CBitcoinAddress, int64> > listReceived; |
|
|
|
list<pair<CBitcoinAddress, int64> > listSent; |
|
|
|
list<pair<CBitcoinAddress, int64_t> > listReceived; |
|
|
|
list<pair<CBitcoinAddress, int64_t> > listSent; |
|
|
|
GetAmounts(allGeneratedImmature, allGeneratedMature, listReceived, listSent, allFee, strSentAccount); |
|
|
|
|
|
|
|
if (strAccount == "") |
|
|
|
nGenerated = allGeneratedMature; |
|
|
|
if (strAccount == strSentAccount) |
|
|
|
{ |
|
|
|
BOOST_FOREACH(const PAIRTYPE(CBitcoinAddress,int64)& s, listSent) |
|
|
|
BOOST_FOREACH(const PAIRTYPE(CBitcoinAddress,int64_t)& s, listSent) |
|
|
|
nSent += s.second; |
|
|
|
nFee = allFee; |
|
|
|
} |
|
|
|
CRITICAL_BLOCK(pwallet->cs_wallet) |
|
|
|
{ |
|
|
|
BOOST_FOREACH(const PAIRTYPE(CBitcoinAddress,int64)& r, listReceived) |
|
|
|
BOOST_FOREACH(const PAIRTYPE(CBitcoinAddress,int64_t)& r, listReceived) |
|
|
|
{ |
|
|
|
if (pwallet->mapAddressBook.count(r.first)) |
|
|
|
{ |
|
|
@ -720,7 +722,7 @@ void CWallet::ResendWalletTransactions() |
|
|
|
{ |
|
|
|
// Do this infrequently and randomly to avoid giving away
|
|
|
|
// that these are our transactions.
|
|
|
|
static int64 nNextTime; |
|
|
|
static int64_t nNextTime; |
|
|
|
if (GetTime() < nNextTime) |
|
|
|
return; |
|
|
|
bool fFirst = (nNextTime == 0); |
|
|
@ -729,7 +731,7 @@ void CWallet::ResendWalletTransactions() |
|
|
|
return; |
|
|
|
|
|
|
|
// Only do it if there's been a new block since last time
|
|
|
|
static int64 nLastTime; |
|
|
|
static int64_t nLastTime; |
|
|
|
if (nTimeBestReceived < nLastTime) |
|
|
|
return; |
|
|
|
nLastTime = GetTime(); |
|
|
@ -746,7 +748,7 @@ void CWallet::ResendWalletTransactions() |
|
|
|
CWalletTx& wtx = item.second; |
|
|
|
// Don't rebroadcast until it's had plenty of time that
|
|
|
|
// it should have gotten in already by now.
|
|
|
|
if (nTimeBestReceived - (int64)wtx.nTimeReceived > 5 * 60) |
|
|
|
if (nTimeBestReceived - (int64_t)wtx.nTimeReceived > 5 * 60) |
|
|
|
mapSorted.insert(make_pair(wtx.nTimeReceived, &wtx)); |
|
|
|
} |
|
|
|
BOOST_FOREACH(PAIRTYPE(const unsigned int, CWalletTx*)& item, mapSorted) |
|
|
@ -768,9 +770,9 @@ void CWallet::ResendWalletTransactions() |
|
|
|
//
|
|
|
|
|
|
|
|
|
|
|
|
int64 CWallet::GetBalance() const |
|
|
|
int64_t CWallet::GetBalance() const |
|
|
|
{ |
|
|
|
int64 nTotal = 0; |
|
|
|
int64_t nTotal = 0; |
|
|
|
CRITICAL_BLOCK(cs_wallet) |
|
|
|
{ |
|
|
|
for (map<uint256, CWalletTx>::const_iterator it = mapWallet.begin(); it != mapWallet.end(); ++it) |
|
|
@ -785,9 +787,9 @@ int64 CWallet::GetBalance() const |
|
|
|
return nTotal; |
|
|
|
} |
|
|
|
|
|
|
|
int64 CWallet::GetUnconfirmedBalance() const |
|
|
|
int64_t CWallet::GetUnconfirmedBalance() const |
|
|
|
{ |
|
|
|
int64 nTotal = 0; |
|
|
|
int64_t nTotal = 0; |
|
|
|
CRITICAL_BLOCK(cs_wallet) |
|
|
|
{ |
|
|
|
for (map<uint256, CWalletTx>::const_iterator it = mapWallet.begin(); it != mapWallet.end(); ++it) |
|
|
@ -801,17 +803,17 @@ int64 CWallet::GetUnconfirmedBalance() const |
|
|
|
return nTotal; |
|
|
|
} |
|
|
|
|
|
|
|
bool CWallet::SelectCoinsMinConf(int64 nTargetValue, int nConfMine, int nConfTheirs, set<pair<const CWalletTx*,unsigned int> >& setCoinsRet, int64& nValueRet) const |
|
|
|
bool CWallet::SelectCoinsMinConf(int64_t nTargetValue, int nConfMine, int nConfTheirs, set<pair<const CWalletTx*,unsigned int> >& setCoinsRet, int64_t& nValueRet) const |
|
|
|
{ |
|
|
|
setCoinsRet.clear(); |
|
|
|
nValueRet = 0; |
|
|
|
|
|
|
|
// List of values less than target
|
|
|
|
pair<int64, pair<const CWalletTx*,unsigned int> > coinLowestLarger; |
|
|
|
coinLowestLarger.first = std::numeric_limits<int64>::max(); |
|
|
|
pair<int64_t, pair<const CWalletTx*,unsigned int> > coinLowestLarger; |
|
|
|
coinLowestLarger.first = std::numeric_limits<int64_t>::max(); |
|
|
|
coinLowestLarger.second.first = NULL; |
|
|
|
vector<pair<int64, pair<const CWalletTx*,unsigned int> > > vValue; |
|
|
|
int64 nTotalLower = 0; |
|
|
|
vector<pair<int64_t, pair<const CWalletTx*,unsigned int> > > vValue; |
|
|
|
int64_t nTotalLower = 0; |
|
|
|
|
|
|
|
CRITICAL_BLOCK(cs_wallet) |
|
|
|
{ |
|
|
@ -838,12 +840,12 @@ bool CWallet::SelectCoinsMinConf(int64 nTargetValue, int nConfMine, int nConfThe |
|
|
|
if (pcoin->IsSpent(i) || !IsMine(pcoin->vout[i])) |
|
|
|
continue; |
|
|
|
|
|
|
|
int64 n = pcoin->vout[i].nValue; |
|
|
|
int64_t n = pcoin->vout[i].nValue; |
|
|
|
|
|
|
|
if (n <= 0) |
|
|
|
continue; |
|
|
|
|
|
|
|
pair<int64,pair<const CWalletTx*,unsigned int> > coin = make_pair(n,make_pair(pcoin,i)); |
|
|
|
pair<int64_t,pair<const CWalletTx*,unsigned int> > coin = make_pair(n,make_pair(pcoin,i)); |
|
|
|
|
|
|
|
if (n == nTargetValue) |
|
|
|
{ |
|
|
@ -890,12 +892,12 @@ bool CWallet::SelectCoinsMinConf(int64 nTargetValue, int nConfMine, int nConfThe |
|
|
|
sort(vValue.rbegin(), vValue.rend()); |
|
|
|
vector<char> vfIncluded; |
|
|
|
vector<char> vfBest(vValue.size(), true); |
|
|
|
int64 nBest = nTotalLower; |
|
|
|
int64_t nBest = nTotalLower; |
|
|
|
|
|
|
|
for (int nRep = 0; nRep < 1000 && nBest != nTargetValue; nRep++) |
|
|
|
{ |
|
|
|
vfIncluded.assign(vValue.size(), false); |
|
|
|
int64 nTotal = 0; |
|
|
|
int64_t nTotal = 0; |
|
|
|
bool fReachedTarget = false; |
|
|
|
for (int nPass = 0; nPass < 2 && !fReachedTarget; nPass++) |
|
|
|
{ |
|
|
@ -946,7 +948,7 @@ bool CWallet::SelectCoinsMinConf(int64 nTargetValue, int nConfMine, int nConfThe |
|
|
|
return true; |
|
|
|
} |
|
|
|
|
|
|
|
bool CWallet::SelectCoins(int64 nTargetValue, set<pair<const CWalletTx*,unsigned int> >& setCoinsRet, int64& nValueRet) const |
|
|
|
bool CWallet::SelectCoins(int64_t nTargetValue, set<pair<const CWalletTx*,unsigned int> >& setCoinsRet, int64_t& nValueRet) const |
|
|
|
{ |
|
|
|
return (SelectCoinsMinConf(nTargetValue, 1, 6, setCoinsRet, nValueRet) || |
|
|
|
SelectCoinsMinConf(nTargetValue, 1, 1, setCoinsRet, nValueRet) || |
|
|
@ -956,10 +958,10 @@ bool CWallet::SelectCoins(int64 nTargetValue, set<pair<const CWalletTx*,unsigned |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
bool CWallet::CreateTransaction(const vector<pair<CScript, int64> >& vecSend, CWalletTx& wtxNew, CReserveKey& reservekey, int64& nFeeRet) |
|
|
|
bool CWallet::CreateTransaction(const vector<pair<CScript, int64_t> >& vecSend, CWalletTx& wtxNew, CReserveKey& reservekey, int64_t& nFeeRet) |
|
|
|
{ |
|
|
|
int64 nValue = 0; |
|
|
|
BOOST_FOREACH (const PAIRTYPE(CScript, int64)& s, vecSend) |
|
|
|
int64_t nValue = 0; |
|
|
|
BOOST_FOREACH (const PAIRTYPE(CScript, int64_t)& s, vecSend) |
|
|
|
{ |
|
|
|
if (nValue < 0) |
|
|
|
return false; |
|
|
@ -983,30 +985,30 @@ bool CWallet::CreateTransaction(const vector<pair<CScript, int64> >& vecSend, CW |
|
|
|
wtxNew.vout.clear(); |
|
|
|
wtxNew.fFromMe = true; |
|
|
|
|
|
|
|
int64 nTotalValue = nValue + nFeeRet; |
|
|
|
int64_t nTotalValue = nValue + nFeeRet; |
|
|
|
double dPriority = 0; |
|
|
|
// vouts to the payees
|
|
|
|
BOOST_FOREACH (const PAIRTYPE(CScript, int64)& s, vecSend) |
|
|
|
BOOST_FOREACH (const PAIRTYPE(CScript, int64_t)& s, vecSend) |
|
|
|
wtxNew.vout.push_back(CTxOut(s.second, s.first)); |
|
|
|
|
|
|
|
// Choose coins to use
|
|
|
|
set<pair<const CWalletTx*,unsigned int> > setCoins; |
|
|
|
int64 nValueIn = 0; |
|
|
|
int64_t nValueIn = 0; |
|
|
|
if (!SelectCoins(nTotalValue, setCoins, nValueIn)) |
|
|
|
return false; |
|
|
|
BOOST_FOREACH(PAIRTYPE(const CWalletTx*, unsigned int) pcoin, setCoins) |
|
|
|
{ |
|
|
|
int64 nCredit = pcoin.first->vout[pcoin.second].nValue; |
|
|
|
int64_t nCredit = pcoin.first->vout[pcoin.second].nValue; |
|
|
|
dPriority += (double)nCredit * pcoin.first->GetDepthInMainChain(); |
|
|
|
} |
|
|
|
|
|
|
|
int64 nChange = nValueIn - nValue - nFeeRet; |
|
|
|
int64_t nChange = nValueIn - nValue - nFeeRet; |
|
|
|
// if sub-cent change is required, the fee must be raised to at least MIN_TX_FEE
|
|
|
|
// or until nChange becomes zero
|
|
|
|
// NOTE: this depends on the exact behaviour of GetMinFee
|
|
|
|
if (nFeeRet < MIN_TX_FEE && nChange > 0 && nChange < CENT) |
|
|
|
{ |
|
|
|
int64 nMoveToFee = min(nChange, MIN_TX_FEE - nFeeRet); |
|
|
|
int64_t nMoveToFee = min(nChange, MIN_TX_FEE - nFeeRet); |
|
|
|
nChange -= nMoveToFee; |
|
|
|
nFeeRet += nMoveToFee; |
|
|
|
} |
|
|
@ -1054,9 +1056,9 @@ bool CWallet::CreateTransaction(const vector<pair<CScript, int64> >& vecSend, CW |
|
|
|
dPriority /= nBytes; |
|
|
|
|
|
|
|
// Check that enough fee is included
|
|
|
|
int64 nPayFee = nTransactionFee * (1 + (int64)nBytes / 1000); |
|
|
|
int64_t nPayFee = nTransactionFee * (1 + (int64_t)nBytes / 1000); |
|
|
|
bool fAllowFree = CTransaction::AllowFree(dPriority); |
|
|
|
int64 nMinFee = wtxNew.GetMinFee(1, fAllowFree, GMF_SEND); |
|
|
|
int64_t nMinFee = wtxNew.GetMinFee(1, fAllowFree, GMF_SEND); |
|
|
|
if (nFeeRet < max(nPayFee, nMinFee)) |
|
|
|
{ |
|
|
|
nFeeRet = max(nPayFee, nMinFee); |
|
|
@ -1074,9 +1076,9 @@ bool CWallet::CreateTransaction(const vector<pair<CScript, int64> >& vecSend, CW |
|
|
|
return true; |
|
|
|
} |
|
|
|
|
|
|
|
bool CWallet::CreateTransaction(CScript scriptPubKey, int64 nValue, CWalletTx& wtxNew, CReserveKey& reservekey, int64& nFeeRet) |
|
|
|
bool CWallet::CreateTransaction(CScript scriptPubKey, int64_t nValue, CWalletTx& wtxNew, CReserveKey& reservekey, int64_t& nFeeRet) |
|
|
|
{ |
|
|
|
vector< pair<CScript, int64> > vecSend; |
|
|
|
vector< pair<CScript, int64_t> > vecSend; |
|
|
|
vecSend.push_back(make_pair(scriptPubKey, nValue)); |
|
|
|
return CreateTransaction(vecSend, wtxNew, reservekey, nFeeRet); |
|
|
|
} |
|
|
@ -1135,10 +1137,10 @@ bool CWallet::CommitTransaction(CWalletTx& wtxNew, CReserveKey& reservekey) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
string CWallet::SendMoney(CScript scriptPubKey, int64 nValue, CWalletTx& wtxNew, bool fAskFee) |
|
|
|
string CWallet::SendMoney(CScript scriptPubKey, int64_t nValue, CWalletTx& wtxNew, bool fAskFee) |
|
|
|
{ |
|
|
|
CReserveKey reservekey(this); |
|
|
|
int64 nFeeRequired; |
|
|
|
int64_t nFeeRequired; |
|
|
|
|
|
|
|
if (IsLocked()) |
|
|
|
{ |
|
|
@ -1169,7 +1171,7 @@ string CWallet::SendMoney(CScript scriptPubKey, int64 nValue, CWalletTx& wtxNew, |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
string CWallet::SendMoneyToBitcoinAddress(const CBitcoinAddress& address, int64 nValue, CWalletTx& wtxNew, bool fAskFee) |
|
|
|
string CWallet::SendMoneyToBitcoinAddress(const CBitcoinAddress& address, int64_t nValue, CWalletTx& wtxNew, bool fAskFee) |
|
|
|
{ |
|
|
|
// Check amount
|
|
|
|
if (nValue <= 0) |
|
|
@ -1299,17 +1301,17 @@ bool CWallet::NewKeyPool() |
|
|
|
CRITICAL_BLOCK(cs_wallet) |
|
|
|
{ |
|
|
|
CWalletDB walletdb(strWalletFile); |
|
|
|
BOOST_FOREACH(int64 nIndex, setKeyPool) |
|
|
|
BOOST_FOREACH(int64_t nIndex, setKeyPool) |
|
|
|
walletdb.ErasePool(nIndex); |
|
|
|
setKeyPool.clear(); |
|
|
|
|
|
|
|
if (IsLocked()) |
|
|
|
return false; |
|
|
|
|
|
|
|
int64 nKeys = max(GetArg("-keypool", 100), (int64)0); |
|
|
|
int64_t nKeys = max(GetArg("-keypool", 100), (int64_t)0); |
|
|
|
for (int i = 0; i < nKeys; i++) |
|
|
|
{ |
|
|
|
int64 nIndex = i+1; |
|
|
|
int64_t nIndex = i+1; |
|
|
|
walletdb.WritePool(nIndex, CKeyPool(GenerateNewKey())); |
|
|
|
setKeyPool.insert(nIndex); |
|
|
|
} |
|
|
@ -1328,10 +1330,10 @@ bool CWallet::TopUpKeyPool() |
|
|
|
CWalletDB walletdb(strWalletFile); |
|
|
|
|
|
|
|
// Top up key pool
|
|
|
|
int64 nTargetSize = max(GetArg("-keypool", 100), (int64)0); |
|
|
|
int64_t nTargetSize = max(GetArg("-keypool", 100), (int64_t)0); |
|
|
|
while (setKeyPool.size() < nTargetSize+1) |
|
|
|
{ |
|
|
|
int64 nEnd = 1; |
|
|
|
int64_t nEnd = 1; |
|
|
|
if (!setKeyPool.empty()) |
|
|
|
nEnd = *(--setKeyPool.end()) + 1; |
|
|
|
if (!walletdb.WritePool(nEnd, CKeyPool(GenerateNewKey()))) |
|
|
@ -1343,7 +1345,7 @@ bool CWallet::TopUpKeyPool() |
|
|
|
return true; |
|
|
|
} |
|
|
|
|
|
|
|
void CWallet::ReserveKeyFromKeyPool(int64& nIndex, CKeyPool& keypool) |
|
|
|
void CWallet::ReserveKeyFromKeyPool(int64_t& nIndex, CKeyPool& keypool) |
|
|
|
{ |
|
|
|
nIndex = -1; |
|
|
|
keypool.vchPubKey.clear(); |
|
|
@ -1369,14 +1371,14 @@ void CWallet::ReserveKeyFromKeyPool(int64& nIndex, CKeyPool& keypool) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
int64 CWallet::AddReserveKey(const CKeyPool& keypool) |
|
|
|
int64_t CWallet::AddReserveKey(const CKeyPool& keypool) |
|
|
|
{ |
|
|
|
CRITICAL_BLOCK(cs_main) |
|
|
|
CRITICAL_BLOCK(cs_wallet) |
|
|
|
{ |
|
|
|
CWalletDB walletdb(strWalletFile); |
|
|
|
|
|
|
|
int64 nIndex = 1 + *(--setKeyPool.end()); |
|
|
|
int64_t nIndex = 1 + *(--setKeyPool.end()); |
|
|
|
if (!walletdb.WritePool(nIndex, keypool)) |
|
|
|
throw runtime_error("AddReserveKey() : writing added key failed"); |
|
|
|
setKeyPool.insert(nIndex); |
|
|
@ -1385,7 +1387,7 @@ int64 CWallet::AddReserveKey(const CKeyPool& keypool) |
|
|
|
return -1; |
|
|
|
} |
|
|
|
|
|
|
|
void CWallet::KeepKey(int64 nIndex) |
|
|
|
void CWallet::KeepKey(int64_t nIndex) |
|
|
|
{ |
|
|
|
// Remove from key pool
|
|
|
|
if (fFileBacked) |
|
|
@ -1396,7 +1398,7 @@ void CWallet::KeepKey(int64 nIndex) |
|
|
|
printf("keypool keep %"PRI64d"\n", nIndex); |
|
|
|
} |
|
|
|
|
|
|
|
void CWallet::ReturnKey(int64 nIndex) |
|
|
|
void CWallet::ReturnKey(int64_t nIndex) |
|
|
|
{ |
|
|
|
// Return to key pool
|
|
|
|
CRITICAL_BLOCK(cs_wallet) |
|
|
@ -1406,7 +1408,7 @@ void CWallet::ReturnKey(int64 nIndex) |
|
|
|
|
|
|
|
bool CWallet::GetKeyFromPool(vector<unsigned char>& result, bool fAllowReuse) |
|
|
|
{ |
|
|
|
int64 nIndex = 0; |
|
|
|
int64_t nIndex = 0; |
|
|
|
CKeyPool keypool; |
|
|
|
CRITICAL_BLOCK(cs_wallet) |
|
|
|
{ |
|
|
@ -1428,9 +1430,9 @@ bool CWallet::GetKeyFromPool(vector<unsigned char>& result, bool fAllowReuse) |
|
|
|
return true; |
|
|
|
} |
|
|
|
|
|
|
|
int64 CWallet::GetOldestKeyPoolTime() |
|
|
|
int64_t CWallet::GetOldestKeyPoolTime() |
|
|
|
{ |
|
|
|
int64 nIndex = 0; |
|
|
|
int64_t nIndex = 0; |
|
|
|
CKeyPool keypool; |
|
|
|
ReserveKeyFromKeyPool(nIndex, keypool); |
|
|
|
if (nIndex == -1) |
|
|
@ -1481,7 +1483,7 @@ void CWallet::GetAllReserveAddresses(set<CBitcoinAddress>& setAddress) |
|
|
|
|
|
|
|
CRITICAL_BLOCK(cs_main) |
|
|
|
CRITICAL_BLOCK(cs_wallet) |
|
|
|
BOOST_FOREACH(const int64& id, setKeyPool) |
|
|
|
BOOST_FOREACH(const int64_t& id, setKeyPool) |
|
|
|
{ |
|
|
|
CKeyPool keypool; |
|
|
|
if (!walletdb.ReadPool(id, keypool)) |
|
|
|