mirror of
https://github.com/kvazar-network/kevacoin.git
synced 2025-02-04 19:24:20 +00:00
Wallet getDebit with excluded keva.
This commit is contained in:
parent
29eb41121d
commit
5977428951
@ -1316,7 +1316,7 @@ isminetype CWallet::IsMine(const CTxIn &txin) const
|
||||
|
||||
// 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, bool fExcludeKeva) const
|
||||
{
|
||||
{
|
||||
LOCK(cs_wallet);
|
||||
@ -1325,8 +1325,15 @@ CAmount CWallet::GetDebit(const CTxIn &txin, const isminefilter& filter) const
|
||||
{
|
||||
const CWalletTx& prev = (*mi).second;
|
||||
if (txin.prevout.n < prev.tx->vout.size())
|
||||
{
|
||||
const CTxOut& prevout = prev.tx->vout[txin.prevout.n];
|
||||
if (fExcludeKeva
|
||||
&& CKevaScript::isKevaScript(prevout.scriptPubKey))
|
||||
return 0;
|
||||
|
||||
if (IsMine(prev.tx->vout[txin.prevout.n]) & filter)
|
||||
return prev.tx->vout[txin.prevout.n].nValue;
|
||||
return prevout.nValue;
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
@ -1386,12 +1393,12 @@ bool CWallet::IsFromMe(const CTransaction& tx) const
|
||||
return (GetDebit(tx, ISMINE_ALL) > 0);
|
||||
}
|
||||
|
||||
CAmount CWallet::GetDebit(const CTransaction& tx, const isminefilter& filter) const
|
||||
CAmount CWallet::GetDebit(const CTransaction& tx, const isminefilter& filter, bool fExcludeKeva) const
|
||||
{
|
||||
CAmount nDebit = 0;
|
||||
for (const CTxIn& txin : tx.vin)
|
||||
{
|
||||
nDebit += GetDebit(txin, filter);
|
||||
nDebit += GetDebit(txin, filter, fExcludeKeva);
|
||||
if (!MoneyRange(nDebit))
|
||||
throw std::runtime_error(std::string(__func__) + ": value out of range");
|
||||
}
|
||||
@ -1520,7 +1527,7 @@ void CWalletTx::GetAmounts(std::list<COutputEntry>& listReceived,
|
||||
CAmount nDebit = GetDebit(filter);
|
||||
if (nDebit > 0) // debit>0 means we signed/sent this transaction
|
||||
{
|
||||
CAmount nValueOut = tx->GetValueOut();
|
||||
CAmount nValueOut = tx->GetValueOut(true);
|
||||
nFee = nDebit - nValueOut;
|
||||
}
|
||||
|
||||
@ -1749,7 +1756,7 @@ std::set<uint256> CWalletTx::GetConflicts() const
|
||||
return result;
|
||||
}
|
||||
|
||||
CAmount CWalletTx::GetDebit(const isminefilter& filter) const
|
||||
CAmount CWalletTx::GetDebit(const isminefilter& filter, bool fExcludeKeva) const
|
||||
{
|
||||
if (tx->vin.empty())
|
||||
return 0;
|
||||
@ -1757,19 +1764,21 @@ CAmount CWalletTx::GetDebit(const isminefilter& filter) const
|
||||
CAmount debit = 0;
|
||||
if(filter & ISMINE_SPENDABLE)
|
||||
{
|
||||
if (fDebitCached)
|
||||
debit += nDebitCached;
|
||||
if (fDebitCached) {
|
||||
debit += (fExcludeKeva ? nDebitCached : nDebitWithKevaCached);
|
||||
}
|
||||
else
|
||||
{
|
||||
nDebitCached = pwallet->GetDebit(*tx, ISMINE_SPENDABLE);
|
||||
nDebitCached = pwallet->GetDebit(*tx, ISMINE_SPENDABLE, false);
|
||||
fDebitCached = true;
|
||||
debit += nDebitCached;
|
||||
}
|
||||
}
|
||||
if(filter & ISMINE_WATCH_ONLY)
|
||||
{
|
||||
if(fWatchDebitCached)
|
||||
debit += nWatchDebitCached;
|
||||
if(fWatchDebitCached) {
|
||||
debit += (fExcludeKeva ? nWatchDebitCached : nWatchDebitWithKevaCached, false);
|
||||
}
|
||||
else
|
||||
{
|
||||
nWatchDebitCached = pwallet->GetDebit(*tx, ISMINE_WATCH_ONLY);
|
||||
|
@ -107,7 +107,9 @@ enum OutputType : int
|
||||
OUTPUT_TYPE_P2SH_SEGWIT,
|
||||
OUTPUT_TYPE_BECH32,
|
||||
|
||||
OUTPUT_TYPE_DEFAULT = OUTPUT_TYPE_P2SH_SEGWIT
|
||||
//OUTPUT_TYPE_DEFAULT = OUTPUT_TYPE_P2SH_SEGWIT
|
||||
// JWU TODO FIXME: Update once we have segwit on Kevacoin.
|
||||
OUTPUT_TYPE_DEFAULT = OUTPUT_TYPE_LEGACY
|
||||
};
|
||||
|
||||
extern OutputType g_address_type;
|
||||
@ -270,7 +272,7 @@ public:
|
||||
bool IsCoinBase() const { return tx->IsCoinBase(); }
|
||||
};
|
||||
|
||||
/**
|
||||
/**
|
||||
* A transaction with a bunch of additional info that only the owner cares about.
|
||||
* It includes any unrecorded transactions needed to link it back to the block chain.
|
||||
*/
|
||||
@ -341,10 +343,12 @@ public:
|
||||
mutable bool fChangeCached;
|
||||
mutable bool fInMempool;
|
||||
mutable CAmount nDebitCached;
|
||||
mutable CAmount nDebitWithKevaCached;
|
||||
mutable CAmount nCreditCached;
|
||||
mutable CAmount nImmatureCreditCached;
|
||||
mutable CAmount nAvailableCreditCached;
|
||||
mutable CAmount nWatchDebitCached;
|
||||
mutable CAmount nWatchDebitWithKevaCached;
|
||||
mutable CAmount nWatchCreditCached;
|
||||
mutable CAmount nImmatureWatchCreditCached;
|
||||
mutable CAmount nAvailableWatchCreditCached;
|
||||
@ -381,10 +385,12 @@ public:
|
||||
fChangeCached = false;
|
||||
fInMempool = false;
|
||||
nDebitCached = 0;
|
||||
nDebitWithKevaCached = 0;
|
||||
nCreditCached = 0;
|
||||
nImmatureCreditCached = 0;
|
||||
nAvailableCreditCached = 0;
|
||||
nWatchDebitCached = 0;
|
||||
nWatchDebitWithKevaCached = 0;
|
||||
nWatchCreditCached = 0;
|
||||
nAvailableWatchCreditCached = 0;
|
||||
nImmatureWatchCreditCached = 0;
|
||||
@ -456,7 +462,7 @@ public:
|
||||
}
|
||||
|
||||
//! filter decides which addresses will count towards the debit
|
||||
CAmount GetDebit(const isminefilter& filter) const;
|
||||
CAmount GetDebit(const isminefilter& filter, bool fExcludeKeva = true) const;
|
||||
CAmount GetCredit(const isminefilter& filter) const;
|
||||
CAmount GetImmatureCredit(bool fUseCache=true) const;
|
||||
CAmount GetAvailableCredit(bool fUseCache=true) const;
|
||||
@ -661,7 +667,7 @@ private:
|
||||
|
||||
|
||||
class WalletRescanReserver; //forward declarations for ScanForWalletTransactions/RescanFromTime
|
||||
/**
|
||||
/**
|
||||
* 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.
|
||||
*/
|
||||
@ -933,7 +939,7 @@ public:
|
||||
void GetKeyBirthTimes(std::map<CTxDestination, int64_t> &mapKeyBirth) const;
|
||||
unsigned int ComputeTimeSmart(const CWalletTx& wtx) const;
|
||||
|
||||
/**
|
||||
/**
|
||||
* Increment the next transaction order id
|
||||
* @return next transaction order id
|
||||
*/
|
||||
@ -1027,7 +1033,7 @@ public:
|
||||
* 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, bool fExcludeKeva = true) const;
|
||||
isminetype IsMine(const CTxOut& txout) const;
|
||||
CAmount GetCredit(const CTxOut& txout, const isminefilter& filter) const;
|
||||
bool IsChange(const CTxOut& txout) const;
|
||||
@ -1035,7 +1041,7 @@ public:
|
||||
bool IsMine(const CTransaction& tx) const;
|
||||
/** should probably be renamed to IsRelevantToMe */
|
||||
bool IsFromMe(const CTransaction& tx) const;
|
||||
CAmount GetDebit(const CTransaction& tx, const isminefilter& filter) const;
|
||||
CAmount GetDebit(const CTransaction& tx, const isminefilter& filter, bool fExcludeKeva = true) 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;
|
||||
@ -1053,7 +1059,7 @@ public:
|
||||
const std::string& GetAccountName(const CScript& scriptPubKey) const;
|
||||
|
||||
void GetScriptForMining(std::shared_ptr<CReserveScript> &script);
|
||||
|
||||
|
||||
unsigned int GetKeyPoolSize()
|
||||
{
|
||||
AssertLockHeld(cs_wallet); // set{Ex,In}ternalKeyPool
|
||||
@ -1078,7 +1084,7 @@ public:
|
||||
//! Flush wallet (bitdb flush)
|
||||
void Flush(bool shutdown=false);
|
||||
|
||||
/**
|
||||
/**
|
||||
* Address book entry changed.
|
||||
* @note called with lock cs_wallet held.
|
||||
*/
|
||||
@ -1087,7 +1093,7 @@ public:
|
||||
const std::string &purpose,
|
||||
ChangeType status)> NotifyAddressBookChanged;
|
||||
|
||||
/**
|
||||
/**
|
||||
* Wallet transaction added, removed or updated.
|
||||
* @note called with lock cs_wallet held.
|
||||
*/
|
||||
@ -1134,7 +1140,7 @@ public:
|
||||
|
||||
/* Generates a new HD master key (will not be activated) */
|
||||
CPubKey GenerateNewHDMasterKey();
|
||||
|
||||
|
||||
/* Set the current HD master key (will reset the chain child index counters)
|
||||
Sets the master key's version based on the current wallet version (so the
|
||||
caller must ensure the current wallet version is correct before calling
|
||||
@ -1202,7 +1208,7 @@ public:
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
/**
|
||||
* Account information.
|
||||
* Stored in wallet with key "acc"+string account name.
|
||||
*/
|
||||
|
Loading…
x
Reference in New Issue
Block a user