mirror of
https://github.com/bitcoin/bitcoin.git
synced 2024-11-20 10:38:42 +01:00
[wallet] Add IsAllFromMe: true if all inputs are from wallet
This commit is contained in:
parent
5754e0341b
commit
766e8a40b4
@ -1154,6 +1154,8 @@ isminetype CWallet::IsMine(const CTxIn &txin) const
|
||||
return ISMINE_NO;
|
||||
}
|
||||
|
||||
// Note that this function doesn't distinguish between a 0-valued input,
|
||||
// and a not-"is mine" (according to the filter) input.
|
||||
CAmount CWallet::GetDebit(const CTxIn &txin, const isminefilter& filter) const
|
||||
{
|
||||
{
|
||||
@ -1236,6 +1238,27 @@ CAmount CWallet::GetDebit(const CTransaction& tx, const isminefilter& filter) co
|
||||
return nDebit;
|
||||
}
|
||||
|
||||
bool CWallet::IsAllFromMe(const CTransaction& tx, const isminefilter& filter) const
|
||||
{
|
||||
LOCK(cs_wallet);
|
||||
|
||||
BOOST_FOREACH(const CTxIn& txin, tx.vin)
|
||||
{
|
||||
auto mi = mapWallet.find(txin.prevout.hash);
|
||||
if (mi == mapWallet.end())
|
||||
return false; // any unknown inputs can't be from us
|
||||
|
||||
const CWalletTx& prev = (*mi).second;
|
||||
|
||||
if (txin.prevout.n >= prev.tx->vout.size())
|
||||
return false; // invalid input!
|
||||
|
||||
if (!(IsMine(prev.tx->vout[txin.prevout.n]) & filter))
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
CAmount CWallet::GetCredit(const CTransaction& tx, const isminefilter& filter) const
|
||||
{
|
||||
CAmount nCredit = 0;
|
||||
|
@ -825,6 +825,10 @@ public:
|
||||
std::set<CTxDestination> GetAccountAddresses(const std::string& strAccount) const;
|
||||
|
||||
isminetype IsMine(const CTxIn& txin) const;
|
||||
/**
|
||||
* Returns amount of debit if the input matches the
|
||||
* filter, otherwise returns 0
|
||||
*/
|
||||
CAmount GetDebit(const CTxIn& txin, const isminefilter& filter) const;
|
||||
isminetype IsMine(const CTxOut& txout) const;
|
||||
CAmount GetCredit(const CTxOut& txout, const isminefilter& filter) const;
|
||||
@ -834,6 +838,8 @@ public:
|
||||
/** should probably be renamed to IsRelevantToMe */
|
||||
bool IsFromMe(const CTransaction& tx) const;
|
||||
CAmount GetDebit(const CTransaction& tx, const isminefilter& filter) const;
|
||||
/** Returns whether all of the inputs match the filter */
|
||||
bool IsAllFromMe(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);
|
||||
|
Loading…
Reference in New Issue
Block a user