aboutsummaryrefslogtreecommitdiff
path: root/src/wallet.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/wallet.h')
-rw-r--r--src/wallet.h74
1 files changed, 53 insertions, 21 deletions
diff --git a/src/wallet.h b/src/wallet.h
index 57633c4aa3..b2e0e5260e 100644
--- a/src/wallet.h
+++ b/src/wallet.h
@@ -14,6 +14,7 @@
class CWalletTx;
class CReserveKey;
class CWalletDB;
+class COutput;
/** (client) version numbers for particular wallet features */
enum WalletFeature
@@ -32,14 +33,14 @@ class CKeyPool
{
public:
int64 nTime;
- std::vector<unsigned char> vchPubKey;
+ CPubKey vchPubKey;
CKeyPool()
{
nTime = GetTime();
}
- CKeyPool(const std::vector<unsigned char>& vchPubKeyIn)
+ CKeyPool(const CPubKey& vchPubKeyIn)
{
nTime = GetTime();
vchPubKey = vchPubKeyIn;
@@ -60,7 +61,7 @@ public:
class CWallet : public CCryptoKeyStore
{
private:
- bool SelectCoinsMinConf(int64 nTargetValue, int nConfMine, int nConfTheirs, std::set<std::pair<const CWalletTx*,unsigned int> >& setCoinsRet, int64& nValueRet) const;
+ void AvailableCoins(std::vector<COutput>& vCoins) const;
bool SelectCoins(int64 nTargetValue, std::set<std::pair<const CWalletTx*,unsigned int> >& setCoinsRet, int64& nValueRet) const;
CWalletDB *pwalletdbEncryption;
@@ -105,16 +106,18 @@ public:
std::map<uint256, CWalletTx> mapWallet;
std::map<uint256, int> mapRequestCount;
- std::map<CBitcoinAddress, std::string> mapAddressBook;
+ std::map<CTxDestination, std::string> mapAddressBook;
- std::vector<unsigned char> vchDefaultKey;
+ CPubKey vchDefaultKey;
// check whether we are allowed to upgrade (or already support) to the named feature
bool CanSupportFeature(enum WalletFeature wf) { return nWalletMaxVersion >= wf; }
+ bool SelectCoinsMinConf(int64 nTargetValue, int nConfMine, int nConfTheirs, std::vector<COutput> vCoins, std::set<std::pair<const CWalletTx*,unsigned int> >& setCoinsRet, int64& nValueRet) const;
+
// keystore implementation
// Generate a new key
- std::vector<unsigned char> GenerateNewKey();
+ CPubKey GenerateNewKey();
// Adds a key to the store, and saves it to disk.
bool AddKey(const CKey& key);
// Adds a key to the store, without saving it to disk (used by LoadWallet)
@@ -123,9 +126,9 @@ public:
bool LoadMinVersion(int nVersion) { nWalletVersion = nVersion; nWalletMaxVersion = std::max(nWalletMaxVersion, nVersion); return true; }
// Adds an encrypted key to the store, and saves it to disk.
- bool AddCryptedKey(const std::vector<unsigned char> &vchPubKey, const std::vector<unsigned char> &vchCryptedSecret);
+ bool AddCryptedKey(const CPubKey &vchPubKey, const std::vector<unsigned char> &vchCryptedSecret);
// Adds an encrypted key to the store, without saving it to disk (used by LoadWallet)
- bool LoadCryptedKey(const std::vector<unsigned char> &vchPubKey, const std::vector<unsigned char> &vchCryptedSecret) { SetMinVersion(FEATURE_WALLETCRYPT); return CCryptoKeyStore::AddCryptedKey(vchPubKey, vchCryptedSecret); }
+ bool LoadCryptedKey(const CPubKey &vchPubKey, const std::vector<unsigned char> &vchCryptedSecret) { SetMinVersion(FEATURE_WALLETCRYPT); return CCryptoKeyStore::AddCryptedKey(vchPubKey, vchCryptedSecret); }
bool AddCScript(const CScript& redeemScript);
bool LoadCScript(const CScript& redeemScript) { return CCryptoKeyStore::AddCScript(redeemScript); }
@@ -144,11 +147,12 @@ public:
void ResendWalletTransactions();
int64 GetBalance() const;
int64 GetUnconfirmedBalance() const;
+ int64 GetImmatureBalance() const;
bool CreateTransaction(const std::vector<std::pair<CScript, int64> >& vecSend, CWalletTx& wtxNew, CReserveKey& reservekey, int64& nFeeRet);
bool CreateTransaction(CScript scriptPubKey, int64 nValue, CWalletTx& wtxNew, CReserveKey& reservekey, int64& nFeeRet);
bool CommitTransaction(CWalletTx& wtxNew, CReserveKey& reservekey);
std::string SendMoney(CScript scriptPubKey, int64 nValue, CWalletTx& wtxNew, bool fAskFee=false);
- std::string SendMoneyToBitcoinAddress(const CBitcoinAddress& address, int64 nValue, CWalletTx& wtxNew, bool fAskFee=false);
+ std::string SendMoneyToDestination(const CTxDestination &address, int64 nValue, CWalletTx& wtxNew, bool fAskFee=false);
bool NewKeyPool();
bool TopUpKeyPool();
@@ -156,9 +160,9 @@ public:
void ReserveKeyFromKeyPool(int64& nIndex, CKeyPool& keypool);
void KeepKey(int64 nIndex);
void ReturnKey(int64 nIndex);
- bool GetKeyFromPool(std::vector<unsigned char> &key, bool fAllowReuse=true);
+ bool GetKeyFromPool(CPubKey &key, bool fAllowReuse=true);
int64 GetOldestKeyPoolTime();
- void GetAllReserveAddresses(std::set<CBitcoinAddress>& setAddress);
+ void GetAllReserveKeys(std::set<CKeyID>& setAddress);
bool IsMine(const CTxIn& txin) const;
int64 GetDebit(const CTxIn& txin) const;
@@ -227,9 +231,9 @@ public:
int LoadWallet(bool& fFirstRunRet);
- bool SetAddressBookName(const CBitcoinAddress& address, const std::string& strName);
+ bool SetAddressBookName(const CTxDestination& address, const std::string& strName);
- bool DelAddressBookName(const CBitcoinAddress& address);
+ bool DelAddressBookName(const CTxDestination& address);
void UpdatedTransaction(const uint256 &hashTx);
@@ -252,7 +256,7 @@ public:
bool GetTransaction(const uint256 &hashTx, CWalletTx& wtx);
- bool SetDefaultKey(const std::vector<unsigned char> &vchPubKey);
+ bool SetDefaultKey(const CPubKey &vchPubKey);
// signify that a particular wallet feature is now used. this may change nWalletVersion and nWalletMaxVersion if those are lower
bool SetMinVersion(enum WalletFeature, CWalletDB* pwalletdbIn = NULL, bool fExplicit = false);
@@ -266,7 +270,7 @@ public:
/** Address book entry changed.
* @note called with lock cs_wallet held.
*/
- boost::signals2::signal<void (CWallet *wallet, const std::string &address, const std::string &label, bool isMine, ChangeType status)> NotifyAddressBookChanged;
+ boost::signals2::signal<void (CWallet *wallet, const CTxDestination &address, const std::string &label, bool isMine, ChangeType status)> NotifyAddressBookChanged;
/** Wallet transaction added, removed or updated.
* @note called with lock cs_wallet held.
@@ -280,7 +284,7 @@ class CReserveKey
protected:
CWallet* pwallet;
int64 nIndex;
- std::vector<unsigned char> vchPubKey;
+ CPubKey vchPubKey;
public:
CReserveKey(CWallet* pwalletIn)
{
@@ -295,7 +299,7 @@ public:
}
void ReturnKey();
- std::vector<unsigned char> GetReservedKey();
+ CPubKey GetReservedKey();
void KeepKey();
};
@@ -532,8 +536,8 @@ public:
return nChangeCached;
}
- void GetAmounts(int64& nGeneratedImmature, int64& nGeneratedMature, std::list<std::pair<CBitcoinAddress, int64> >& listReceived,
- std::list<std::pair<CBitcoinAddress, int64> >& listSent, int64& nFee, std::string& strSentAccount) const;
+ void GetAmounts(int64& nGeneratedImmature, int64& nGeneratedMature, std::list<std::pair<CTxDestination, int64> >& listReceived,
+ std::list<std::pair<CTxDestination, int64> >& listSent, int64& nFee, std::string& strSentAccount) const;
void GetAccountAmounts(const std::string& strAccount, int64& nGenerated, int64& nReceived,
int64& nSent, int64& nFee) const;
@@ -601,6 +605,34 @@ public:
};
+
+
+class COutput
+{
+public:
+ const CWalletTx *tx;
+ int i;
+ int nDepth;
+
+ COutput(const CWalletTx *txIn, int iIn, int nDepthIn)
+ {
+ tx = txIn; i = iIn; nDepth = nDepthIn;
+ }
+
+ std::string ToString() const
+ {
+ return strprintf("COutput(%s, %d, %d) [%s]", tx->GetHash().ToString().substr(0,10).c_str(), i, nDepth, FormatMoney(tx->vout[i].nValue).c_str());
+ }
+
+ void print() const
+ {
+ printf("%s\n", ToString().c_str());
+ }
+};
+
+
+
+
/** Private key that includes an expiration date in case it never gets used. */
class CWalletKey
{
@@ -640,7 +672,7 @@ public:
class CAccount
{
public:
- std::vector<unsigned char> vchPubKey;
+ CPubKey vchPubKey;
CAccount()
{
@@ -649,7 +681,7 @@ public:
void SetNull()
{
- vchPubKey.clear();
+ vchPubKey = CPubKey();
}
IMPLEMENT_SERIALIZE