diff options
author | Suhas Daftuar <sdaftuar@gmail.com> | 2016-12-09 15:31:06 -0500 |
---|---|---|
committer | Suhas Daftuar <sdaftuar@gmail.com> | 2017-01-10 08:14:50 -0500 |
commit | 766e8a40b478353a89622f42809ddb11e695a0c9 (patch) | |
tree | 9684f52d1c11174b940e36e3f0ea5c209ef2d367 /src/wallet/wallet.cpp | |
parent | 5754e0341b7c033d4caf99534aca47e9981bd7ed (diff) | |
download | bitcoin-766e8a40b478353a89622f42809ddb11e695a0c9.tar.xz |
[wallet] Add IsAllFromMe: true if all inputs are from wallet
Diffstat (limited to 'src/wallet/wallet.cpp')
-rw-r--r-- | src/wallet/wallet.cpp | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/src/wallet/wallet.cpp b/src/wallet/wallet.cpp index 2775f4def3..be5d692c92 100644 --- a/src/wallet/wallet.cpp +++ b/src/wallet/wallet.cpp @@ -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; |