Skip to content

Commit 38ddeb3

Browse files
Merge #6776: chore: classify wallet/coinjoin.{cpp,h} as Dash-specific, apply clang-format, minor housekeeping
f4e1846 trivial: minor housekeeping of `wallet/coinjoin.cpp` (Kittywhiskers Van Gogh) a93f5cb chore: classify `wallet/coinjoin.*` as Dash-specific, run `clang-format` (Kittywhiskers Van Gogh) Pull request description: ## Motivation CoinJoin-specific wallet code was split into separate source files in [dash#6633](#6633) but were not listed as Dash-specific (and therefore covered by our set of linters) as cleanup was not within the scope of [dash#6633](#6633). This pull request closes that gap. ## Breaking Changes None expected. ## Checklist - [x] I have performed a self-review of my own code - [x] I have commented my code, particularly in hard-to-understand areas **(note: N/A)** - [x] I have added or updated relevant unit/integration/functional/e2e tests **(note: N/A)** - [x] I have made corresponding changes to the documentation **(note: N/A)** - [x] I have assigned this pull request to a milestone _(for repository code-owners and collaborators only)_ ACKs for top commit: PastaPastaPasta: utACK f4e1846 UdjinM6: utACK f4e1846 Tree-SHA512: 362538af782261a7f62b0ffc6ecad528ccb4c765c86473f97ab3890a024c2d50ae6b75911fe7e617a4debbb4a00c36e041be2eb6ebf596e91bf5475f687a8c2e
2 parents 10ad0af + f4e1846 commit 38ddeb3

File tree

3 files changed

+99
-80
lines changed

3 files changed

+99
-80
lines changed

src/wallet/coinjoin.cpp

Lines changed: 92 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,14 @@
66
#include <wallet/coinjoin.h>
77

88
#include <key_io.h>
9-
#include <coinjoin/common.h>
10-
#include <coinjoin/options.h>
11-
#include <evo/dmn_types.h>
129
#include <wallet/receive.h>
1310
#include <wallet/spend.h>
14-
#include <wallet/wallet.h>
1511
#include <wallet/transaction.h>
12+
#include <wallet/wallet.h>
13+
14+
#include <coinjoin/common.h>
15+
#include <coinjoin/options.h>
16+
#include <evo/dmn_types.h>
1617

1718
namespace wallet {
1819
void CWallet::InitCJSaltFromDb()
@@ -78,21 +79,20 @@ bool CWallet::SelectTxDSInsByDenomination(int nDenom, CAmount nValueMax, std::ve
7879
nValueTotal += nValue;
7980
vecTxDSInRet.emplace_back(CTxDSIn(txin, scriptPubKey, nRounds));
8081
setRecentTxIds.emplace(txHash);
81-
WalletCJLogPrint(this, "CWallet::%s -- hash: %s, nValue: %d.%08d\n",
82-
__func__, txHash.ToString(), nValue / COIN, nValue % COIN);
82+
WalletCJLogPrint(this, "CWallet::%s -- hash: %s, nValue: %d.%08d\n", __func__, txHash.ToString(), nValue / COIN,
83+
nValue % COIN);
8384
}
8485

8586
WalletCJLogPrint(this, "CWallet::%s -- setRecentTxIds.size(): %d\n", __func__, setRecentTxIds.size());
8687

8788
return nValueTotal > 0;
8889
}
8990

90-
struct CompareByPriority
91-
{
92-
bool operator()(const COutput& t1,
93-
const COutput& t2) const
91+
struct CompareByPriority {
92+
bool operator()(const COutput& t1, const COutput& t2) const
9493
{
95-
return CoinJoin::CalculateAmountPriority(t1.GetEffectiveValue()) > CoinJoin::CalculateAmountPriority(t2.GetEffectiveValue());
94+
return CoinJoin::CalculateAmountPriority(t1.GetEffectiveValue()) >
95+
CoinJoin::CalculateAmountPriority(t2.GetEffectiveValue());
9696
}
9797
};
9898

@@ -121,21 +121,24 @@ bool CWallet::SelectDenominatedAmounts(CAmount nValueMax, std::set<CAmount>& set
121121
return nValueTotal >= CoinJoin::GetSmallestDenomination();
122122
}
123123

124-
std::vector<CompactTallyItem> CWallet::SelectCoinsGroupedByAddresses(bool fSkipDenominated, bool fAnonymizable, bool fSkipUnconfirmed, int nMaxOupointsPerAddress) const
124+
std::vector<CompactTallyItem> CWallet::SelectCoinsGroupedByAddresses(bool fSkipDenominated, bool fAnonymizable,
125+
bool fSkipUnconfirmed, int nMaxOupointsPerAddress) const
125126
{
126127
LOCK(cs_wallet);
127128

128129
isminefilter filter = ISMINE_SPENDABLE;
129130

130131
// Try using the cache for already confirmed mixable inputs.
131132
// This should only be used if nMaxOupointsPerAddress was NOT specified.
132-
if(nMaxOupointsPerAddress == -1 && fAnonymizable && fSkipUnconfirmed) {
133-
if(fSkipDenominated && fAnonymizableTallyCachedNonDenom) {
134-
LogPrint(BCLog::SELECTCOINS, "SelectCoinsGroupedByAddresses - using cache for non-denom inputs %d\n", vecAnonymizableTallyCachedNonDenom.size());
133+
if (nMaxOupointsPerAddress == -1 && fAnonymizable && fSkipUnconfirmed) {
134+
if (fSkipDenominated && fAnonymizableTallyCachedNonDenom) {
135+
LogPrint(BCLog::SELECTCOINS, "SelectCoinsGroupedByAddresses - using cache for non-denom inputs %d\n",
136+
vecAnonymizableTallyCachedNonDenom.size());
135137
return vecAnonymizableTallyCachedNonDenom;
136138
}
137-
if(!fSkipDenominated && fAnonymizableTallyCached) {
138-
LogPrint(BCLog::SELECTCOINS, "SelectCoinsGroupedByAddresses - using cache for all inputs %d\n", vecAnonymizableTallyCached.size());
139+
if (!fSkipDenominated && fAnonymizableTallyCached) {
140+
LogPrint(BCLog::SELECTCOINS, "SelectCoinsGroupedByAddresses - using cache for all inputs %d\n",
141+
vecAnonymizableTallyCached.size());
139142
return vecAnonymizableTallyCached;
140143
}
141144
}
@@ -146,13 +149,12 @@ std::vector<CompactTallyItem> CWallet::SelectCoinsGroupedByAddresses(bool fSkipD
146149
std::map<CTxDestination, CompactTallyItem> mapTally;
147150
std::set<uint256> setWalletTxesCounted;
148151
for (const auto& outpoint : setWalletUTXO) {
149-
150152
if (!setWalletTxesCounted.emplace(outpoint.hash).second) continue;
151153

152-
const auto it = mapWallet.find(outpoint.hash);
154+
const auto it{mapWallet.find(outpoint.hash)};
153155
if (it == mapWallet.end()) continue;
154156

155-
const CWalletTx& wtx = (*it).second;
157+
const CWalletTx& wtx{(*it).second};
156158

157159
if (wtx.IsCoinBase() && GetTxBlocksToMaturity(wtx) > 0) continue;
158160
if (fSkipUnconfirmed && !CachedTxIsTrusted(*this, wtx)) continue;
@@ -163,23 +165,26 @@ std::vector<CompactTallyItem> CWallet::SelectCoinsGroupedByAddresses(bool fSkipD
163165
if (!ExtractDestination(wtx.tx->vout[i].scriptPubKey, txdest)) continue;
164166

165167
isminefilter mine = IsMine(txdest);
166-
if(!(mine & filter)) continue;
168+
if (!(mine & filter)) continue;
167169

168170
auto itTallyItem = mapTally.find(txdest);
169-
if (nMaxOupointsPerAddress != -1 && itTallyItem != mapTally.end() && int64_t(itTallyItem->second.outpoints.size()) >= nMaxOupointsPerAddress) continue;
171+
if (nMaxOupointsPerAddress != -1 && itTallyItem != mapTally.end() &&
172+
int64_t(itTallyItem->second.outpoints.size()) >= nMaxOupointsPerAddress) {
173+
continue;
174+
}
170175

171176
COutPoint target_outpoint(outpoint.hash, i);
172-
if(IsSpent(target_outpoint) || IsLockedCoin(target_outpoint)) continue;
177+
if (IsSpent(target_outpoint) || IsLockedCoin(target_outpoint)) continue;
173178

174-
if(fSkipDenominated && CoinJoin::IsDenominatedAmount(wtx.tx->vout[i].nValue)) continue;
179+
if (fSkipDenominated && CoinJoin::IsDenominatedAmount(wtx.tx->vout[i].nValue)) continue;
175180

176-
if(fAnonymizable) {
181+
if (fAnonymizable) {
177182
// ignore collaterals
178-
if(CoinJoin::IsCollateralAmount(wtx.tx->vout[i].nValue)) continue;
183+
if (CoinJoin::IsCollateralAmount(wtx.tx->vout[i].nValue)) continue;
179184
if (fMasternodeMode && dmn_types::IsCollateralAmount(wtx.tx->vout[i].nValue)) continue;
180185
// ignore outputs that are 10 times smaller then the smallest denomination
181186
// otherwise they will just lead to higher fee / lower priority
182-
if(wtx.tx->vout[i].nValue <= nSmallestDenom/10) continue;
187+
if (wtx.tx->vout[i].nValue <= nSmallestDenom / 10) continue;
183188
// ignore mixed
184189
if (IsFullyMixed(target_outpoint)) continue;
185190
}
@@ -197,14 +202,14 @@ std::vector<CompactTallyItem> CWallet::SelectCoinsGroupedByAddresses(bool fSkipD
197202
// NOTE: vecTallyRet is "sorted" by txdest (i.e. address), just like mapTally
198203
std::vector<CompactTallyItem> vecTallyRet;
199204
for (const auto& item : mapTally) {
200-
if(fAnonymizable && item.second.nAmount < nSmallestDenom) continue;
205+
if (fAnonymizable && item.second.nAmount < nSmallestDenom) continue;
201206
vecTallyRet.push_back(item.second);
202207
}
203208

204209
// Cache already confirmed mixable entries for later use.
205210
// This should only be used if nMaxOupointsPerAddress was NOT specified.
206-
if(nMaxOupointsPerAddress == -1 && fAnonymizable && fSkipUnconfirmed) {
207-
if(fSkipDenominated) {
211+
if (nMaxOupointsPerAddress == -1 && fAnonymizable && fSkipUnconfirmed) {
212+
if (fSkipDenominated) {
208213
vecAnonymizableTallyCachedNonDenom = vecTallyRet;
209214
fAnonymizableTallyCachedNonDenom = true;
210215
} else {
@@ -216,8 +221,9 @@ std::vector<CompactTallyItem> CWallet::SelectCoinsGroupedByAddresses(bool fSkipD
216221
// debug
217222
if (LogAcceptDebug(BCLog::SELECTCOINS)) {
218223
std::string strMessage = "SelectCoinsGroupedByAddresses - vecTallyRet:\n";
219-
for (const auto& item : vecTallyRet)
220-
strMessage += strprintf(" %s %f\n", EncodeDestination(item.txdest), float(item.nAmount)/COIN);
224+
for (const auto& item : vecTallyRet) {
225+
strMessage += strprintf(" %s %f\n", EncodeDestination(item.txdest), float(item.nAmount) / COIN);
226+
}
221227
LogPrint(BCLog::SELECTCOINS, "%s", strMessage); /* Continued */
222228
}
223229

@@ -241,7 +247,7 @@ int CWallet::CountInputsWithAmount(CAmount nInputAmount) const
241247
LOCK(cs_wallet);
242248

243249
for (const auto& outpoint : setWalletUTXO) {
244-
const auto it = mapWallet.find(outpoint.hash);
250+
const auto it{mapWallet.find(outpoint.hash)};
245251
if (it == mapWallet.end()) continue;
246252
if (it->second.tx->vout[outpoint.n].nValue != nInputAmount) continue;
247253
if (GetTxDepthInMainChain(it->second) < 0) continue;
@@ -257,7 +263,7 @@ int CWallet::GetRealOutpointCoinJoinRounds(const COutPoint& outpoint, int nRound
257263
{
258264
LOCK(cs_wallet);
259265

260-
const int nRoundsMax = MAX_COINJOIN_ROUNDS + CCoinJoinClientOptions::GetRandomRounds();
266+
const int nRoundsMax{MAX_COINJOIN_ROUNDS + CCoinJoinClientOptions::GetRandomRounds()};
261267

262268
if (nRounds >= nRoundsMax) {
263269
// there can only be nRoundsMax rounds max
@@ -272,7 +278,7 @@ int CWallet::GetRealOutpointCoinJoinRounds(const COutPoint& outpoint, int nRound
272278
}
273279

274280
// TODO wtx should refer to a CWalletTx object, not a pointer, based on surrounding code
275-
const CWalletTx* wtx = GetWalletTx(outpoint.hash);
281+
const CWalletTx* wtx{GetWalletTx(outpoint.hash)};
276282

277283
if (wtx == nullptr || wtx->tx == nullptr) {
278284
// no such tx in this wallet
@@ -298,7 +304,7 @@ int CWallet::GetRealOutpointCoinJoinRounds(const COutPoint& outpoint, int nRound
298304
}
299305

300306
// make sure the final output is non-denominate
301-
if (!CoinJoin::IsDenominatedAmount(txOutRef->nValue)) { //NOT DENOM
307+
if (!CoinJoin::IsDenominatedAmount(txOutRef->nValue)) { // NOT DENOM
302308
*nRoundsRef = -2;
303309
WalletCJLogPrint(this, "%s UPDATED %-70s %3d\n", __func__, outpoint.ToStringShort(), *nRoundsRef);
304310
return *nRoundsRef;
@@ -327,15 +333,20 @@ int CWallet::GetRealOutpointCoinJoinRounds(const COutPoint& outpoint, int nRound
327333
if (InputIsMine(*this, txinNext)) {
328334
int n = GetRealOutpointCoinJoinRounds(txinNext.prevout, nRounds + 1);
329335
// denom found, find the shortest chain or initially assign nShortest with the first found value
330-
if(n >= 0 && (n < nShortest || nShortest == -10)) {
336+
if (n >= 0 && (n < nShortest || nShortest == -10)) {
331337
nShortest = n;
332338
fDenomFound = true;
333339
}
334340
}
335341
}
336-
*nRoundsRef = fDenomFound
337-
? (nShortest >= nRoundsMax - 1 ? nRoundsMax : nShortest + 1) // good, we a +1 to the shortest one but only nRoundsMax rounds max allowed
338-
: 0; // too bad, we are the fist one in that chain
342+
*nRoundsRef = [&]() {
343+
if (fDenomFound) {
344+
// good, we a +1 to the shortest one but only nRoundsMax rounds max allowed
345+
return nShortest >= nRoundsMax - 1 ? nRoundsMax : nShortest + 1;
346+
}
347+
// too bad, we are the first one in that chain
348+
return 0;
349+
}();
339350
WalletCJLogPrint(this, "%s UPDATED %-70s %3d\n", __func__, outpoint.ToStringShort(), *nRoundsRef);
340351
return *nRoundsRef;
341352
}
@@ -345,7 +356,8 @@ int CWallet::GetCappedOutpointCoinJoinRounds(const COutPoint& outpoint) const
345356
{
346357
LOCK(cs_wallet);
347358
int realCoinJoinRounds = GetRealOutpointCoinJoinRounds(outpoint);
348-
return realCoinJoinRounds > CCoinJoinClientOptions::GetRounds() ? CCoinJoinClientOptions::GetRounds() : realCoinJoinRounds;
359+
return realCoinJoinRounds > CCoinJoinClientOptions::GetRounds() ? CCoinJoinClientOptions::GetRounds()
360+
: realCoinJoinRounds;
349361
}
350362

351363
void CWallet::ClearCoinJoinRoundsCache()
@@ -361,7 +373,7 @@ bool CWallet::IsDenominated(const COutPoint& outpoint) const
361373
{
362374
LOCK(cs_wallet);
363375

364-
const auto it = mapWallet.find(outpoint.hash);
376+
const auto it{mapWallet.find(outpoint.hash)};
365377
if (it == mapWallet.end()) {
366378
return false;
367379
}
@@ -387,7 +399,7 @@ bool CWallet::IsFullyMixed(const COutPoint& outpoint) const
387399
CDataStream ss(SER_GETHASH, PROTOCOL_VERSION);
388400
ss << outpoint << nCoinJoinSalt;
389401
uint256 nHash;
390-
CSHA256().Write((const unsigned char*)ss.data(), ss.size()).Finalize(nHash.begin());
402+
CSHA256().Write(reinterpret_cast<const uint8_t*>(ss.data()), ss.size()).Finalize(nHash.begin());
391403
if (ReadLE64(nHash.begin()) % 2 == 0) {
392404
return false;
393405
}
@@ -428,14 +440,13 @@ CAmount CWallet::GetAnonymizableBalance(bool fSkipDenominated, bool fSkipUnconfi
428440

429441
CAmount nTotal = 0;
430442

431-
const CAmount nSmallestDenom = CoinJoin::GetSmallestDenomination();
432-
const CAmount nMixingCollateral = CoinJoin::GetCollateralAmount();
443+
const CAmount nSmallestDenom{CoinJoin::GetSmallestDenomination()};
444+
const CAmount nMixingCollateral{CoinJoin::GetCollateralAmount()};
433445
for (const auto& item : vecTally) {
434446
bool fIsDenominated = CoinJoin::IsDenominatedAmount(item.nAmount);
435-
if(fSkipDenominated && fIsDenominated) continue;
447+
if (fSkipDenominated && fIsDenominated) continue;
436448
// assume that the fee to create denoms should be mixing collateral at max
437-
if(item.nAmount >= nSmallestDenom + (fIsDenominated ? 0 : nMixingCollateral))
438-
nTotal += item.nAmount;
449+
if (item.nAmount >= nSmallestDenom + (fIsDenominated ? 0 : nMixingCollateral)) nTotal += item.nAmount;
439450
}
440451

441452
return nTotal;
@@ -452,15 +463,15 @@ float CWallet::GetAverageAnonymizedRounds() const
452463

453464
LOCK(cs_wallet);
454465
for (const auto& outpoint : setWalletUTXO) {
455-
if(!IsDenominated(outpoint)) continue;
466+
if (!IsDenominated(outpoint)) continue;
456467

457468
nTotal += GetCappedOutpointCoinJoinRounds(outpoint);
458469
nCount++;
459470
}
460471

461-
if(nCount == 0) return 0;
472+
if (nCount == 0) return 0;
462473

463-
return (float)nTotal/nCount;
474+
return (float)nTotal / nCount;
464475
}
465476

466477
// Note: calculated including unconfirmed,
@@ -473,7 +484,7 @@ CAmount CWallet::GetNormalizedAnonymizedBalance() const
473484

474485
LOCK(cs_wallet);
475486
for (const auto& outpoint : setWalletUTXO) {
476-
const auto it = mapWallet.find(outpoint.hash);
487+
const auto it{mapWallet.find(outpoint.hash)};
477488
if (it == mapWallet.end()) continue;
478489

479490
CAmount nValue = it->second.tx->vout[outpoint.n].nValue;
@@ -492,26 +503,29 @@ CAmount CachedTxGetAnonymizedCredit(const CWallet& wallet, const CWalletTx& wtx,
492503
AssertLockHeld(wallet.cs_wallet);
493504

494505
// Exclude coinbase and conflicted txes
495-
if (wtx.IsCoinBase() || wallet.GetTxDepthInMainChain(wtx) < 0)
496-
return 0;
506+
if (wtx.IsCoinBase() || wallet.GetTxDepthInMainChain(wtx) < 0) return 0;
497507

498508
CAmount nCredit = 0;
499509
uint256 hashTx = wtx.GetHash();
500-
for (unsigned int i = 0; i < wtx.tx->vout.size(); i++)
501-
{
502-
const CTxOut &txout = wtx.tx->vout[i];
503-
const COutPoint outpoint = COutPoint(hashTx, i);
510+
for (unsigned int i = 0; i < wtx.tx->vout.size(); i++) {
511+
const CTxOut& txout{wtx.tx->vout[i]};
512+
const COutPoint outpoint(hashTx, i);
504513

505514
if (coinControl.HasSelected() && !coinControl.IsSelected(outpoint)) {
506515
continue;
507516
}
508517

509-
if (wallet.IsSpent(outpoint) || !CoinJoin::IsDenominatedAmount(txout.nValue)) continue;
518+
if (wallet.IsSpent(outpoint) || !CoinJoin::IsDenominatedAmount(txout.nValue)) {
519+
continue;
520+
}
510521

511-
if (wallet.IsFullyMixed(outpoint)) {
512-
nCredit += OutputGetCredit(wallet, txout, ISMINE_SPENDABLE);
513-
if (!MoneyRange(nCredit))
514-
throw std::runtime_error(std::string(__func__) + ": value out of range");
522+
if (!wallet.IsFullyMixed(outpoint)) {
523+
continue;
524+
}
525+
526+
nCredit += OutputGetCredit(wallet, txout, ISMINE_SPENDABLE);
527+
if (!MoneyRange(nCredit)) {
528+
throw std::runtime_error(std::string(__func__) + ": value out of range");
515529
}
516530
}
517531

@@ -525,8 +539,7 @@ CoinJoinCredits CachedTxGetAvailableCoinJoinCredits(const CWallet& wallet, const
525539
AssertLockHeld(wallet.cs_wallet);
526540

527541
// Must wait until coinbase is safely deep enough in the chain before valuing it
528-
if (wtx.IsCoinBase() && wallet.GetTxBlocksToMaturity(wtx) > 0)
529-
return ret;
542+
if (wtx.IsCoinBase() && wallet.GetTxBlocksToMaturity(wtx) > 0) return ret;
530543

531544
int nDepth = wallet.GetTxDepthInMainChain(wtx);
532545
if (nDepth < 0) return ret;
@@ -535,29 +548,35 @@ CoinJoinCredits CachedTxGetAvailableCoinJoinCredits(const CWallet& wallet, const
535548

536549
if (wtx.m_amounts[CWalletTx::ANON_CREDIT].m_cached[ISMINE_SPENDABLE]) {
537550
if (ret.is_unconfirmed && wtx.m_amounts[CWalletTx::DENOM_UCREDIT].m_cached[ISMINE_SPENDABLE]) {
538-
return {wtx.m_amounts[CWalletTx::ANON_CREDIT].m_value[ISMINE_SPENDABLE], wtx.m_amounts[CWalletTx::DENOM_UCREDIT].m_value[ISMINE_SPENDABLE], ret.is_unconfirmed};
551+
return {wtx.m_amounts[CWalletTx::ANON_CREDIT].m_value[ISMINE_SPENDABLE],
552+
wtx.m_amounts[CWalletTx::DENOM_UCREDIT].m_value[ISMINE_SPENDABLE], ret.is_unconfirmed};
539553
} else if (!ret.is_unconfirmed && wtx.m_amounts[CWalletTx::DENOM_CREDIT].m_cached[ISMINE_SPENDABLE]) {
540-
return {wtx.m_amounts[CWalletTx::ANON_CREDIT].m_value[ISMINE_SPENDABLE], wtx.m_amounts[CWalletTx::DENOM_CREDIT].m_value[ISMINE_SPENDABLE], ret.is_unconfirmed};
554+
return {wtx.m_amounts[CWalletTx::ANON_CREDIT].m_value[ISMINE_SPENDABLE],
555+
wtx.m_amounts[CWalletTx::DENOM_CREDIT].m_value[ISMINE_SPENDABLE], ret.is_unconfirmed};
541556
}
542557
}
543558

544559
uint256 hashTx = wtx.GetHash();
545560
for (unsigned int i = 0; i < wtx.tx->vout.size(); i++) {
546-
const CTxOut &txout = wtx.tx->vout[i];
547-
const COutPoint outpoint = COutPoint(hashTx, i);
561+
const CTxOut& txout{wtx.tx->vout[i]};
562+
const COutPoint outpoint(hashTx, i);
548563

549-
if (wallet.IsSpent(outpoint) || !CoinJoin::IsDenominatedAmount(txout.nValue)) continue;
550-
const CAmount credit = OutputGetCredit(wallet, txout, ISMINE_SPENDABLE);
564+
if (wallet.IsSpent(outpoint) || !CoinJoin::IsDenominatedAmount(txout.nValue)) {
565+
continue;
566+
}
551567

568+
const CAmount credit{OutputGetCredit(wallet, txout, ISMINE_SPENDABLE)};
552569
if (wallet.IsFullyMixed(outpoint)) {
553570
ret.m_anonymized += credit;
554-
if (!MoneyRange(ret.m_anonymized))
571+
if (!MoneyRange(ret.m_anonymized)) {
555572
throw std::runtime_error(std::string(__func__) + ": value out of range");
573+
}
556574
}
557575

558576
ret.m_denominated += credit;
559-
if (!MoneyRange(ret.m_denominated))
577+
if (!MoneyRange(ret.m_denominated)) {
560578
throw std::runtime_error(std::string(__func__) + ": value out of range");
579+
}
561580
}
562581

563582
wtx.m_amounts[CWalletTx::ANON_CREDIT].Set(ISMINE_SPENDABLE, ret.m_anonymized);

0 commit comments

Comments
 (0)