Bitcoin  0.12.99
P2P Digital Currency
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
Public Types | Public Member Functions | Static Public Member Functions | Public Attributes | Static Public Attributes | Private Types | Private Member Functions | Private Attributes | List of all members
CWallet Class Reference

A CWallet is an extension of a keystore, which also maintains a set of transactions and balances, and provides the ability to create new transactions. More...

#include <wallet.h>

Inheritance diagram for CWallet:
[legend]
Collaboration diagram for CWallet:
[legend]

Public Types

typedef std::map< unsigned int,
CMasterKey
MasterKeyMap
 
typedef std::pair< CWalletTx
*, CAccountingEntry * > 
TxPair
 
typedef std::multimap< int64_t,
TxPair
TxItems
 

Public Member Functions

 CWallet ()
 
 CWallet (const std::string &strWalletFileIn)
 
 ~CWallet ()
 
void SetNull ()
 
const CWalletTxGetWalletTx (const uint256 &hash) const
 
bool CanSupportFeature (enum WalletFeature wf)
 check whether we are allowed to upgrade (or already support) to the named feature More...
 
void AvailableCoins (std::vector< COutput > &vCoins, bool fOnlyConfirmed=true, const CCoinControl *coinControl=NULL, bool fIncludeZeroValue=false) const
 populate vCoins with vector of available COutputs. More...
 
bool SelectCoinsMinConf (const CAmount &nTargetValue, int nConfMine, int nConfTheirs, std::vector< COutput > vCoins, std::set< std::pair< const CWalletTx *, unsigned int > > &setCoinsRet, CAmount &nValueRet) const
 Shuffle and select coins until nTargetValue is reached while avoiding small change; This method is stochastic for some inputs and upon completion the coin set and corresponding actual target value is assembled. More...
 
bool IsSpent (const uint256 &hash, unsigned int n) const
 Outpoint is spent if any non-conflicted transaction spends it: More...
 
bool IsLockedCoin (uint256 hash, unsigned int n) const
 
void LockCoin (const COutPoint &output)
 
void UnlockCoin (const COutPoint &output)
 
void UnlockAllCoins ()
 
void ListLockedCoins (std::vector< COutPoint > &vOutpts)
 
CPubKey GenerateNewKey ()
 keystore implementation Generate a new key More...
 
bool AddKeyPubKey (const CKey &key, const CPubKey &pubkey)
 Adds a key to the store, and saves it to disk. More...
 
bool LoadKey (const CKey &key, const CPubKey &pubkey)
 Adds a key to the store, without saving it to disk (used by LoadWallet) More...
 
bool LoadKeyMetadata (const CPubKey &pubkey, const CKeyMetadata &metadata)
 Load metadata (used by LoadWallet) More...
 
bool LoadMinVersion (int nVersion)
 
bool AddCryptedKey (const CPubKey &vchPubKey, const std::vector< unsigned char > &vchCryptedSecret)
 Adds an encrypted key to the store, and saves it to disk. More...
 
bool LoadCryptedKey (const CPubKey &vchPubKey, const std::vector< unsigned char > &vchCryptedSecret)
 Adds an encrypted key to the store, without saving it to disk (used by LoadWallet) More...
 
bool AddCScript (const CScript &redeemScript)
 Support for BIP 0013 : see https://github.com/bitcoin/bips/blob/master/bip-0013.mediawiki. More...
 
bool LoadCScript (const CScript &redeemScript)
 
bool AddDestData (const CTxDestination &dest, const std::string &key, const std::string &value)
 Adds a destination data tuple to the store, and saves it to disk. More...
 
bool EraseDestData (const CTxDestination &dest, const std::string &key)
 Erases a destination data tuple in the store and on disk. More...
 
bool LoadDestData (const CTxDestination &dest, const std::string &key, const std::string &value)
 Adds a destination data tuple to the store, without saving it to disk. More...
 
bool GetDestData (const CTxDestination &dest, const std::string &key, std::string *value) const
 Look up a destination data tuple in the store, return true if found false otherwise. More...
 
bool AddWatchOnly (const CScript &dest)
 Adds a watch-only address to the store, and saves it to disk. More...
 
bool RemoveWatchOnly (const CScript &dest)
 
bool LoadWatchOnly (const CScript &dest)
 Adds a watch-only address to the store, without saving it to disk (used by LoadWallet) More...
 
bool Unlock (const SecureString &strWalletPassphrase)
 
bool ChangeWalletPassphrase (const SecureString &strOldWalletPassphrase, const SecureString &strNewWalletPassphrase)
 
bool EncryptWallet (const SecureString &strWalletPassphrase)
 
void GetKeyBirthTimes (std::map< CKeyID, int64_t > &mapKeyBirth) const
 
int64_t IncOrderPosNext (CWalletDB *pwalletdb=NULL)
 Increment the next transaction order id. More...
 
void MarkDirty ()
 
bool AddToWallet (const CWalletTx &wtxIn, bool fFromLoadWallet, CWalletDB *pwalletdb)
 
void SyncTransaction (const CTransaction &tx, const CBlockIndex *pindex, const CBlock *pblock)
 
bool AddToWalletIfInvolvingMe (const CTransaction &tx, const CBlock *pblock, bool fUpdate)
 Add a transaction to the wallet, or update it. More...
 
int ScanForWalletTransactions (CBlockIndex *pindexStart, bool fUpdate=false)
 Scan the block chain (starting in pindexStart) for transactions from or to us. More...
 
void ReacceptWalletTransactions ()
 
void ResendWalletTransactions (int64_t nBestBlockTime)
 
std::vector< uint256ResendWalletTransactionsBefore (int64_t nTime)
 
CAmount GetBalance () const
 
CAmount GetUnconfirmedBalance () const
 
CAmount GetImmatureBalance () const
 
CAmount GetWatchOnlyBalance () const
 
CAmount GetUnconfirmedWatchOnlyBalance () const
 
CAmount GetImmatureWatchOnlyBalance () const
 
bool FundTransaction (CMutableTransaction &tx, CAmount &nFeeRet, int &nChangePosInOut, std::string &strFailReason, bool includeWatching, bool lockUnspents, const CTxDestination &destChange=CNoDestination())
 Insert additional inputs into the transaction by calling CreateTransaction();. More...
 
bool CreateTransaction (const std::vector< CRecipient > &vecSend, CWalletTx &wtxNew, CReserveKey &reservekey, CAmount &nFeeRet, int &nChangePosInOut, std::string &strFailReason, const CCoinControl *coinControl=NULL, bool sign=true)
 Create a new transaction paying the recipients with a set of coins selected by SelectCoins(); Also create the change output, when needed. More...
 
bool CommitTransaction (CWalletTx &wtxNew, CReserveKey &reservekey)
 Call after CreateTransaction unless you want to abort. More...
 
bool AddAccountingEntry (const CAccountingEntry &, CWalletDB &pwalletdb)
 
bool NewKeyPool ()
 Mark old keypool keys as used, and generate all new keys. More...
 
bool TopUpKeyPool (unsigned int kpSize=0)
 
void ReserveKeyFromKeyPool (int64_t &nIndex, CKeyPool &keypool)
 
void KeepKey (int64_t nIndex)
 
void ReturnKey (int64_t nIndex)
 
bool GetKeyFromPool (CPubKey &key)
 
int64_t GetOldestKeyPoolTime ()
 
void GetAllReserveKeys (std::set< CKeyID > &setAddress) const
 
std::set< std::set
< CTxDestination > > 
GetAddressGroupings ()
 
std::map< CTxDestination, CAmountGetAddressBalances ()
 
std::set< CTxDestinationGetAccountAddresses (const std::string &strAccount) const
 
isminetype IsMine (const CTxIn &txin) const
 
CAmount GetDebit (const CTxIn &txin, const isminefilter &filter) const
 
isminetype IsMine (const CTxOut &txout) const
 
CAmount GetCredit (const CTxOut &txout, const isminefilter &filter) const
 
bool IsChange (const CTxOut &txout) const
 
CAmount GetChange (const CTxOut &txout) const
 
bool IsMine (const CTransaction &tx) const
 
bool IsFromMe (const CTransaction &tx) const
 should probably be renamed to IsRelevantToMe More...
 
CAmount GetDebit (const CTransaction &tx, const isminefilter &filter) const
 
CAmount GetCredit (const CTransaction &tx, const isminefilter &filter) const
 
CAmount GetChange (const CTransaction &tx) const
 
void SetBestChain (const CBlockLocator &loc)
 
DBErrors LoadWallet (bool &fFirstRunRet)
 
DBErrors ZapWalletTx (std::vector< CWalletTx > &vWtx)
 
DBErrors ZapSelectTx (std::vector< uint256 > &vHashIn, std::vector< uint256 > &vHashOut)
 
bool SetAddressBook (const CTxDestination &address, const std::string &strName, const std::string &purpose)
 
bool DelAddressBook (const CTxDestination &address)
 
void UpdatedTransaction (const uint256 &hashTx)
 
void Inventory (const uint256 &hash)
 
void GetScriptForMining (boost::shared_ptr< CReserveScript > &script)
 
void ResetRequestCount (const uint256 &hash)
 
unsigned int GetKeyPoolSize ()
 
bool SetDefaultKey (const CPubKey &vchPubKey)
 
bool SetMinVersion (enum WalletFeature, CWalletDB *pwalletdbIn=NULL, bool fExplicit=false)
 signify that a particular wallet feature is now used. this may change nWalletVersion and nWalletMaxVersion if those are lower More...
 
bool SetMaxVersion (int nVersion)
 change which version we're allowed to upgrade to (note that this does not immediately imply upgrading to that format) More...
 
int GetVersion ()
 get the current wallet format (the oldest client version guaranteed to understand this wallet) More...
 
std::set< uint256GetConflicts (const uint256 &txid) const
 Get wallet transactions that conflict with given transaction (spend same outputs) More...
 
void Flush (bool shutdown=false)
 Flush wallet (bitdb flush) More...
 
bool GetBroadcastTransactions () const
 Inquire whether this wallet broadcasts transactions. More...
 
void SetBroadcastTransactions (bool broadcast)
 Set whether this wallet broadcasts transactions. More...
 
bool AbandonTransaction (const uint256 &hashTx)
 
- Public Member Functions inherited from CCryptoKeyStore
 CCryptoKeyStore ()
 
bool IsCrypted () const
 
bool IsLocked () const
 
bool Lock ()
 
bool HaveKey (const CKeyID &address) const
 Check whether a key corresponding to a given address is present in the store. More...
 
bool GetKey (const CKeyID &address, CKey &keyOut) const
 
bool GetPubKey (const CKeyID &address, CPubKey &vchPubKeyOut) const
 
void GetKeys (std::set< CKeyID > &setAddress) const
 
- Public Member Functions inherited from CBasicKeyStore
virtual bool HaveCScript (const CScriptID &hash) const
 
virtual bool GetCScript (const CScriptID &hash, CScript &redeemScriptOut) const
 
virtual bool HaveWatchOnly (const CScript &dest) const
 
virtual bool HaveWatchOnly () const
 
- Public Member Functions inherited from CKeyStore
virtual ~CKeyStore ()
 
virtual bool AddKey (const CKey &key)
 

Static Public Member Functions

static CAmount GetMinimumFee (unsigned int nTxBytes, unsigned int nConfirmTarget, const CTxMemPool &pool)
 Estimate the minimum fee considering user set parameters and the required fee. More...
 
static CAmount GetRequiredFee (unsigned int nTxBytes)
 Return the minimum required fee taking into account the floating relay fee and user set minimum transaction fee. More...
 
static bool Verify ()
 Verify the wallet database and perform salvage if required. More...
 
static std::string GetWalletHelpString (bool showDebug)
 
static bool InitLoadWallet ()
 
static bool ParameterInteraction ()
 

Public Attributes

CCriticalSection cs_wallet
 
bool fFileBacked
 
std::string strWalletFile
 
std::set< int64_t > setKeyPool
 
std::map< CKeyID, CKeyMetadatamapKeyMetadata
 
MasterKeyMap mapMasterKeys
 
unsigned int nMasterKeyMaxID
 
std::map< uint256, CWalletTxmapWallet
 
std::list< CAccountingEntrylaccentries
 
TxItems wtxOrdered
 
int64_t nOrderPosNext
 
std::map< uint256, int > mapRequestCount
 
std::map< CTxDestination,
CAddressBookData
mapAddressBook
 
CPubKey vchDefaultKey
 
std::set< COutPointsetLockedCoins
 
int64_t nTimeFirstKey
 
boost::signals2::signal< void(CWallet
*wallet, const CTxDestination
&address, const std::string
&label, bool isMine, const
std::string &purpose,
ChangeType status)> 
NotifyAddressBookChanged
 Address book entry changed. More...
 
boost::signals2::signal< void(CWallet
*wallet, const uint256 &hashTx,
ChangeType status)> 
NotifyTransactionChanged
 Wallet transaction added, removed or updated. More...
 
boost::signals2::signal< void(const
std::string &title, int
nProgress)> 
ShowProgress
 Show progress e.g. More...
 
boost::signals2::signal< void(bool
fHaveWatchOnly)> 
NotifyWatchonlyChanged
 Watch-only address added. More...
 
- Public Attributes inherited from CCryptoKeyStore
boost::signals2::signal< void(CCryptoKeyStore
*wallet)> 
NotifyStatusChanged
 Wallet status (encrypted, locked) changed. More...
 

Static Public Attributes

static CFeeRate minTxFee = CFeeRate(DEFAULT_TRANSACTION_MINFEE)
 Fees smaller than this (in satoshi) are considered zero fee (for transaction creation) Override with -mintxfee. More...
 
static CFeeRate fallbackFee = CFeeRate(DEFAULT_FALLBACK_FEE)
 If fee estimation does not have enough data to provide estimates, use this fee instead. More...
 

Private Types

typedef std::multimap
< COutPoint, uint256
TxSpends
 Used to keep track of spent outpoints, and detect and report conflicts (double-spends or mutated transactions where the mutant gets mined). More...
 

Private Member Functions

bool SelectCoins (const std::vector< COutput > &vAvailableCoins, const CAmount &nTargetValue, std::set< std::pair< const CWalletTx *, unsigned int > > &setCoinsRet, CAmount &nValueRet, const CCoinControl *coinControl=NULL) const
 Select a set of coins such that nValueRet >= nTargetValue and at least all coins from coinControl are selected; Never select unconfirmed coins if they are not ours. More...
 
void AddToSpends (const COutPoint &outpoint, const uint256 &wtxid)
 
void AddToSpends (const uint256 &wtxid)
 
void MarkConflicted (const uint256 &hashBlock, const uint256 &hashTx)
 
void SyncMetaData (std::pair< TxSpends::iterator, TxSpends::iterator >)
 

Private Attributes

CWalletDBpwalletdbEncryption
 
int nWalletVersion
 the current wallet version: clients below this version are not able to load the wallet More...
 
int nWalletMaxVersion
 the maximum wallet format version: memory-only variable that specifies to what version this wallet may be upgraded More...
 
int64_t nNextResend
 
int64_t nLastResend
 
bool fBroadcastTransactions
 
TxSpends mapTxSpends
 

Additional Inherited Members

- Protected Member Functions inherited from CCryptoKeyStore
bool SetCrypted ()
 
bool EncryptKeys (CKeyingMaterial &vMasterKeyIn)
 will encrypt previously unencrypted keys More...
 
bool Unlock (const CKeyingMaterial &vMasterKeyIn)
 
- Protected Member Functions inherited from CValidationInterface
virtual void UpdatedBlockTip (const CBlockIndex *pindex)
 
virtual void BlockChecked (const CBlock &, const CValidationState &)
 
friend void::RegisterValidationInterface (CValidationInterface *)
 
friend void::UnregisterValidationInterface (CValidationInterface *)
 
friend void::UnregisterAllValidationInterfaces ()
 
- Protected Attributes inherited from CBasicKeyStore
KeyMap mapKeys
 
WatchKeyMap mapWatchKeys
 
ScriptMap mapScripts
 
WatchOnlySet setWatchOnly
 
- Protected Attributes inherited from CKeyStore
CCriticalSection cs_KeyStore
 

Detailed Description

A CWallet is an extension of a keystore, which also maintains a set of transactions and balances, and provides the ability to create new transactions.

Definition at line 542 of file wallet.h.

Member Typedef Documentation

typedef std::map<unsigned int, CMasterKey> CWallet::MasterKeyMap

Definition at line 595 of file wallet.h.

typedef std::multimap<int64_t, TxPair > CWallet::TxItems

Definition at line 636 of file wallet.h.

Definition at line 635 of file wallet.h.

typedef std::multimap<COutPoint, uint256> CWallet::TxSpends
private

Used to keep track of spent outpoints, and detect and report conflicts (double-spends or mutated transactions where the mutant gets mined).

Definition at line 569 of file wallet.h.

Constructor & Destructor Documentation

CWallet::CWallet ( )
inline

Definition at line 599 of file wallet.h.

Here is the call graph for this function:

CWallet::CWallet ( const std::string &  strWalletFileIn)
inline

Definition at line 604 of file wallet.h.

Here is the call graph for this function:

CWallet::~CWallet ( )
inline

Definition at line 612 of file wallet.h.

Member Function Documentation

bool CWallet::AddDestData ( const CTxDestination dest,
const std::string &  key,
const std::string &  value 
)

Adds a destination data tuple to the store, and saves it to disk.

Definition at line 2980 of file wallet.cpp.

Here is the call graph for this function:

Here is the caller graph for this function:

bool CWallet::CanSupportFeature ( enum WalletFeature  wf)
inline

check whether we are allowed to upgrade (or already support) to the named feature

Definition at line 653 of file wallet.h.

bool CWallet::EraseDestData ( const CTxDestination dest,
const std::string &  key 
)

Erases a destination data tuple in the store and on disk.

Definition at line 2991 of file wallet.cpp.

Here is the call graph for this function:

Here is the caller graph for this function:

bool CWallet::GetBroadcastTransactions ( ) const
inline

Inquire whether this wallet broadcasts transactions.

Definition at line 873 of file wallet.h.

bool CWallet::GetDestData ( const CTxDestination dest,
const std::string &  key,
std::string *  value 
) const

Look up a destination data tuple in the store, return true if found false otherwise.

Definition at line 3006 of file wallet.cpp.

void CWallet::GetKeyBirthTimes ( std::map< CKeyID, int64_t > &  mapKeyBirth) const

Definition at line 2928 of file wallet.cpp.

Here is the call graph for this function:

Here is the caller graph for this function:

unsigned int CWallet::GetKeyPoolSize ( )
inline

Definition at line 824 of file wallet.h.

Here is the caller graph for this function:

int CWallet::GetVersion ( )
inline

get the current wallet format (the oldest client version guaranteed to understand this wallet)

Definition at line 839 of file wallet.h.

Here is the caller graph for this function:

std::string CWallet::GetWalletHelpString ( bool  showDebug)
static

Definition at line 3022 of file wallet.cpp.

Here is the call graph for this function:

Here is the caller graph for this function:

bool CWallet::InitLoadWallet ( )
static

Definition at line 3058 of file wallet.cpp.

Here is the call graph for this function:

Here is the caller graph for this function:

void CWallet::Inventory ( const uint256 hash)
inlinevirtual

Reimplemented from CValidationInterface.

Definition at line 807 of file wallet.h.

bool CWallet::LoadDestData ( const CTxDestination dest,
const std::string &  key,
const std::string &  value 
)

Adds a destination data tuple to the store, without saving it to disk.

Definition at line 3000 of file wallet.cpp.

Here is the caller graph for this function:

bool CWallet::LoadKey ( const CKey key,
const CPubKey pubkey 
)
inline

Adds a key to the store, without saving it to disk (used by LoadWallet)

Definition at line 684 of file wallet.h.

Here is the call graph for this function:

Here is the caller graph for this function:

bool CWallet::LoadMinVersion ( int  nVersion)
inline

Definition at line 688 of file wallet.h.

Here is the caller graph for this function:

bool CWallet::ParameterInteraction ( )
static

Definition at line 3208 of file wallet.cpp.

Here is the call graph for this function:

Here is the caller graph for this function:

void CWallet::ResetRequestCount ( const uint256 hash)
inlinevirtual

Reimplemented from CValidationInterface.

Definition at line 818 of file wallet.h.

void CWallet::SetBroadcastTransactions ( bool  broadcast)
inline

Set whether this wallet broadcasts transactions.

Definition at line 875 of file wallet.h.

Here is the caller graph for this function:

void CWallet::SetNull ( )
inline

Definition at line 618 of file wallet.h.

Here is the caller graph for this function:

Member Data Documentation

CCriticalSection CWallet::cs_wallet
mutable

Definition at line 587 of file wallet.h.

CFeeRate CWallet::fallbackFee = CFeeRate(DEFAULT_FALLBACK_FEE)
static

If fee estimation does not have enough data to provide estimates, use this fee instead.

Has no effect if not using fee estimation Override with -fallbackfee

Definition at line 757 of file wallet.h.

bool CWallet::fBroadcastTransactions
private

Definition at line 562 of file wallet.h.

bool CWallet::fFileBacked

Definition at line 589 of file wallet.h.

std::list<CAccountingEntry> CWallet::laccentries

Definition at line 633 of file wallet.h.

std::map<CTxDestination, CAddressBookData> CWallet::mapAddressBook

Definition at line 642 of file wallet.h.

std::map<CKeyID, CKeyMetadata> CWallet::mapKeyMetadata

Definition at line 593 of file wallet.h.

MasterKeyMap CWallet::mapMasterKeys

Definition at line 596 of file wallet.h.

std::map<uint256, int> CWallet::mapRequestCount

Definition at line 640 of file wallet.h.

TxSpends CWallet::mapTxSpends
private

Definition at line 570 of file wallet.h.

std::map<uint256, CWalletTx> CWallet::mapWallet

Definition at line 632 of file wallet.h.

CFeeRate CWallet::minTxFee = CFeeRate(DEFAULT_TRANSACTION_MINFEE)
static

Fees smaller than this (in satoshi) are considered zero fee (for transaction creation) Override with -mintxfee.

Definition at line 756 of file wallet.h.

int64_t CWallet::nLastResend
private

Definition at line 561 of file wallet.h.

unsigned int CWallet::nMasterKeyMaxID

Definition at line 597 of file wallet.h.

int64_t CWallet::nNextResend
private

Definition at line 560 of file wallet.h.

int64_t CWallet::nOrderPosNext

Definition at line 639 of file wallet.h.

boost::signals2::signal<void (CWallet *wallet, const CTxDestination &address, const std::string &label, bool isMine, const std::string &purpose, ChangeType status)> CWallet::NotifyAddressBookChanged

Address book entry changed.

Note
called with lock cs_wallet held.

Definition at line 857 of file wallet.h.

boost::signals2::signal<void (CWallet *wallet, const uint256 &hashTx, ChangeType status)> CWallet::NotifyTransactionChanged

Wallet transaction added, removed or updated.

Note
called with lock cs_wallet held.

Definition at line 864 of file wallet.h.

boost::signals2::signal<void (bool fHaveWatchOnly)> CWallet::NotifyWatchonlyChanged

Watch-only address added.

Definition at line 870 of file wallet.h.

int64_t CWallet::nTimeFirstKey

Definition at line 648 of file wallet.h.

int CWallet::nWalletMaxVersion
private

the maximum wallet format version: memory-only variable that specifies to what version this wallet may be upgraded

Definition at line 558 of file wallet.h.

int CWallet::nWalletVersion
private

the current wallet version: clients below this version are not able to load the wallet

Definition at line 555 of file wallet.h.

CWalletDB* CWallet::pwalletdbEncryption
private

Definition at line 552 of file wallet.h.

std::set<int64_t> CWallet::setKeyPool

Definition at line 592 of file wallet.h.

std::set<COutPoint> CWallet::setLockedCoins

Definition at line 646 of file wallet.h.

boost::signals2::signal<void (const std::string &title, int nProgress)> CWallet::ShowProgress

Show progress e.g.

for rescan

Definition at line 867 of file wallet.h.

std::string CWallet::strWalletFile

Definition at line 590 of file wallet.h.

CPubKey CWallet::vchDefaultKey

Definition at line 644 of file wallet.h.

TxItems CWallet::wtxOrdered

Definition at line 637 of file wallet.h.


The documentation for this class was generated from the following files: