[wallet] Add IsAllFromMe: true if all inputs are from wallet
This commit is contained in:
parent
5754e0341b
commit
766e8a40b4
2 changed files with 29 additions and 0 deletions
|
@ -1154,6 +1154,8 @@ isminetype CWallet::IsMine(const CTxIn &txin) const
|
||||||
return ISMINE_NO;
|
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
|
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;
|
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 CWallet::GetCredit(const CTransaction& tx, const isminefilter& filter) const
|
||||||
{
|
{
|
||||||
CAmount nCredit = 0;
|
CAmount nCredit = 0;
|
||||||
|
|
|
@ -825,6 +825,10 @@ public:
|
||||||
std::set<CTxDestination> GetAccountAddresses(const std::string& strAccount) const;
|
std::set<CTxDestination> GetAccountAddresses(const std::string& strAccount) const;
|
||||||
|
|
||||||
isminetype IsMine(const CTxIn& txin) 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;
|
CAmount GetDebit(const CTxIn& txin, const isminefilter& filter) const;
|
||||||
isminetype IsMine(const CTxOut& txout) const;
|
isminetype IsMine(const CTxOut& txout) const;
|
||||||
CAmount GetCredit(const CTxOut& txout, const isminefilter& filter) const;
|
CAmount GetCredit(const CTxOut& txout, const isminefilter& filter) const;
|
||||||
|
@ -834,6 +838,8 @@ public:
|
||||||
/** should probably be renamed to IsRelevantToMe */
|
/** should probably be renamed to IsRelevantToMe */
|
||||||
bool IsFromMe(const CTransaction& tx) const;
|
bool IsFromMe(const CTransaction& tx) const;
|
||||||
CAmount GetDebit(const CTransaction& tx, const isminefilter& filter) 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 GetCredit(const CTransaction& tx, const isminefilter& filter) const;
|
||||||
CAmount GetChange(const CTransaction& tx) const;
|
CAmount GetChange(const CTransaction& tx) const;
|
||||||
void SetBestChain(const CBlockLocator& loc);
|
void SetBestChain(const CBlockLocator& loc);
|
||||||
|
|
Loading…
Reference in a new issue