diff options
| author | Suhas Daftuar <[email protected]> | 2016-12-09 15:31:06 -0500 |
|---|---|---|
| committer | Suhas Daftuar <[email protected]> | 2017-01-10 08:14:50 -0500 |
| commit | 766e8a40b478353a89622f42809ddb11e695a0c9 (patch) | |
| tree | 9684f52d1c11174b940e36e3f0ea5c209ef2d367 /src/wallet/wallet.cpp | |
| parent | Merge #8811: rpc: Add support for JSON-RPC named arguments (diff) | |
| download | discoin-766e8a40b478353a89622f42809ddb11e695a0c9.tar.xz discoin-766e8a40b478353a89622f42809ddb11e695a0c9.zip | |
[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 2775f4def..be5d692c9 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; |