int64_t CWallet::GetDebit(const CTransaction& tx, const isminefilter& filter) const
{
- int64_t nDebit = 0;
+ CBigNum nDebit = 0;
for(const CTxIn& txin : tx.vin)
{
- nDebit += GetDebit(txin, filter);
- if (!MoneyRange(nDebit))
+ auto nValue = GetDebit(txin, filter);
+ nDebit += nValue;
+ if (!MoneyRange(nValue) || !MoneyRange(nDebit))
throw runtime_error("CWallet::GetDebit() : value out of range");
}
- return nDebit;
+ return nDebit.getint64();
}
int64_t CWallet::GetCredit(const CTransaction& tx, const isminefilter& filter) const
{
- int64_t nCredit = 0;
+ CBigNum nCredit = 0;
for(const CTxOut& txout : tx.vout)
{
- nCredit += GetCredit(txout, filter);
- if (!MoneyRange(nCredit))
+ auto nValue = GetCredit(txout, filter);
+ nCredit += nValue;
+ if (!MoneyRange(nValue) || !MoneyRange(nCredit))
throw runtime_error("CWallet::GetCredit() : value out of range");
}
- return nCredit;
+ return nCredit.getint64();
}
int64_t CWallet::GetChange(const CTransaction& tx) const
{
- int64_t nChange = 0;
+ CBigNum nChange = 0;
for(const CTxOut& txout : tx.vout)
{
- nChange += GetChange(txout);
- if (!MoneyRange(nChange))
+ int64_t nValue = GetChange(txout);
+ nChange += nValue;
+ if (!MoneyRange(nValue) || !MoneyRange(nChange))
throw runtime_error("CWallet::GetChange() : value out of range");
}
- return nChange;
+ return nChange.getint64();
}
int64_t CWalletTx::GetTxTime() const
return nAvailableCreditCached;
}
- int64_t nCredit = 0;
- for (unsigned int i = 0; i < vout.size(); i++)
+ CBigNum nCredit = 0;
+ for (uint32_t i = 0; i < vout.size(); i++)
{
if (!IsSpent(i))
{
const CTxOut &txout = vout[i];
- nCredit += pwallet->GetCredit(txout, MINE_SPENDABLE);
- if (!MoneyRange(nCredit))
+ int64_t nValue = pwallet->GetCredit(txout, MINE_SPENDABLE);
+ nCredit += nValue;
+ if (!MoneyRange(nValue) || !MoneyRange(nCredit))
throw runtime_error("CWalletTx::GetAvailableCredit() : value out of range");
}
}
- nAvailableCreditCached = nCredit;
+ nAvailableCreditCached = nCredit.getint64();
fAvailableCreditCached = true;
- return nCredit;
+ return nCredit.getint64();
}
int64_t CWalletTx::GetAvailableWatchCredit(bool fUseCache) const
return nAvailableWatchCreditCached;
}
- int64_t nCredit = 0;
+ CBigNum nCredit = 0;
for (unsigned int i = 0; i < vout.size(); i++)
{
if (!IsSpent(i))
{
const CTxOut &txout = vout[i];
- nCredit += pwallet->GetCredit(txout, MINE_WATCH_ONLY);
- if (!MoneyRange(nCredit))
+ int64_t nValue = pwallet->GetCredit(txout, MINE_WATCH_ONLY);
+ nCredit += nValue;
+ if (!MoneyRange(nValue) || !MoneyRange(nCredit))
throw runtime_error("CWalletTx::GetAvailableCredit() : value out of range");
}
}
- nAvailableWatchCreditCached = nCredit;
+ nAvailableWatchCreditCached = nCredit.getint64();
fAvailableWatchCreditCached = true;
- return nCredit;
+ return nCredit.getint64();
}
int64_t CWalletTx::GetChange() const
wtxNew.vin.push_back(CTxIn(coin.first->GetHash(),coin.second));
// Sign
- int nIn = 0;
+ uint32_t nIn = 0;
for(const auto& coin : setCoins)
if (!SignSignature(*this, *coin.first, wtxNew, nIn++))
return false;
if (wtxNew.vout[0].nValue <= 0)
return false;
- for (unsigned int i = 0; i < wtxNew.vin.size(); i++) {
+ for (uint32_t i = 0; i < wtxNew.vin.size(); i++) {
const CWalletTx *txin = vwtxPrev[i];
// Sign all scripts again
}
// Sign
- int nIn = 0;
+ uint32_t nIn = 0;
for(const CWalletTx* pcoin : vwtxPrev)
{
if (!SignSignature(*this, *pcoin, txNew, nIn++))
}
// Limit size
- unsigned int nBytes = ::GetSerializeSize(txNew, SER_NETWORK, PROTOCOL_VERSION);
+ auto nBytes = ::GetSerializeSize(txNew, SER_NETWORK, PROTOCOL_VERSION);
if (nBytes >= MAX_BLOCK_SIZE_GEN/5)
return error("CreateCoinStake : exceeded coinstake size limit\n");