Merge pull request #410 from UdjinM6/v0.12.0.x_fix_progress

V0.12.0.x (Yet) another attempt to get DS progress displayed right
This commit is contained in:
evan82 2015-07-08 07:15:39 -07:00
commit 87207fbc36
3 changed files with 38 additions and 42 deletions

View File

@ -355,32 +355,30 @@ void OverviewPage::updateDarksendProgress()
} }
ui->labelAmountRounds->setText(strAmountAndRounds); ui->labelAmountRounds->setText(strAmountAndRounds);
// calculate parts of the progress, each of them shouldn't be higher than 1: // calculate parts of the progress, each of them shouldn't be higher than 1
// mixing progress of denominated balance // progress of denominating
int64_t denominatedBalance = pwalletMain->GetDenominatedBalance();
float denomPart = 0; float denomPart = 0;
if(denominatedBalance > 0) // mixing progress of denominated balance
{
denomPart = (float)pwalletMain->GetNormalizedAnonymizedBalance() / denominatedBalance;
denomPart = denomPart > 1 ? 1 : denomPart;
}
// % of fully anonymized balance
float anonPart = 0; float anonPart = 0;
if(nMaxToAnonymize > 0)
{ int64_t denominatedBalance = pwalletMain->GetDenominatedBalance() + nDenominatedUnconfirmedBalance;
anonPart = (float)pwalletMain->GetAnonymizedBalance() / nMaxToAnonymize; denomPart = (float)denominatedBalance / nMaxToAnonymize;
// if anonPart is > 1 then we are done, make denomPart equal 1 too denomPart = denomPart > 1 ? 1 : denomPart;
anonPart = anonPart > 1 ? (denomPart = 1, 1) : anonPart;
} anonPart = (float)pwalletMain->GetNormalizedAnonymizedBalance() / nMaxToAnonymize;
// if anonPart is > 1 then we are done, make denomPart equal 1 too
anonPart = anonPart > 1 ? (denomPart = 1, 1) : anonPart;
// apply some weights to them (sum should be <=100) and calculate the whole progress // apply some weights to them (sum should be <=100) and calculate the whole progress
int progress = 80 * denomPart + 20 * anonPart; denomPart = ceilf((denomPart * 20) * 100) / 100;
anonPart = ceilf((anonPart * 80) * 100) / 100;
float progress = denomPart + anonPart;
if(progress >= 100) progress = 100; if(progress >= 100) progress = 100;
ui->darksendProgress->setValue(progress); ui->darksendProgress->setValue(progress);
QString strToolPip = tr("Progress: %1% (inputs have an average of %2 of %n rounds)", "", nDarksendRounds).arg(progress).arg(pwalletMain->GetAverageAnonymizedRounds()); QString strToolPip = tr("Progress: %1% (%2% + %3%; denominated inputs have %4 of %n rounds on average)", "", nDarksendRounds)
.arg(progress).arg(denomPart).arg(anonPart).arg(pwalletMain->GetAverageAnonymizedRounds());
ui->darksendProgress->setToolTip(strToolPip); ui->darksendProgress->setToolTip(strToolPip);
} }

View File

@ -1240,6 +1240,8 @@ CAmount CWallet::GetAnonymizedBalance() const
return nTotal; return nTotal;
} }
// Note: calculated including unconfirmed,
// that's ok as long as we use it for informational purposes only
double CWallet::GetAverageAnonymizedRounds() const double CWallet::GetAverageAnonymizedRounds() const
{ {
double fTotal = 0; double fTotal = 0;
@ -1251,20 +1253,17 @@ double CWallet::GetAverageAnonymizedRounds() const
{ {
const CWalletTx* pcoin = &(*it).second; const CWalletTx* pcoin = &(*it).second;
if (pcoin->IsTrusted()) uint256 hash = (*it).first;
{
uint256 hash = (*it).first;
for (unsigned int i = 0; i < pcoin->vout.size(); i++) { for (unsigned int i = 0; i < pcoin->vout.size(); i++) {
CTxIn vin = CTxIn(hash, i); CTxIn vin = CTxIn(hash, i);
if(IsSpent(hash, i) || !IsMine(pcoin->vout[i]) || !IsDenominated(vin)) continue; if(IsSpent(hash, i) || !IsMine(pcoin->vout[i]) || !IsDenominated(vin)) continue;
int rounds = GetInputDarksendRounds(vin); int rounds = GetInputDarksendRounds(vin);
fTotal += (float)rounds; fTotal += (float)rounds;
fCount += 1; fCount += 1;
}
} }
} }
} }
@ -1274,6 +1273,8 @@ double CWallet::GetAverageAnonymizedRounds() const
return fTotal/fCount; return fTotal/fCount;
} }
// Note: calculated including unconfirmed,
// that's ok as long as we use it for informational purposes only
CAmount CWallet::GetNormalizedAnonymizedBalance() const CAmount CWallet::GetNormalizedAnonymizedBalance() const
{ {
CAmount nTotal = 0; CAmount nTotal = 0;
@ -1284,19 +1285,16 @@ CAmount CWallet::GetNormalizedAnonymizedBalance() const
{ {
const CWalletTx* pcoin = &(*it).second; const CWalletTx* pcoin = &(*it).second;
if (pcoin->IsTrusted()) uint256 hash = (*it).first;
{
uint256 hash = (*it).first;
for (unsigned int i = 0; i < pcoin->vout.size(); i++) { for (unsigned int i = 0; i < pcoin->vout.size(); i++) {
CTxIn vin = CTxIn(hash, i); CTxIn vin = CTxIn(hash, i);
if(IsSpent(hash, i) || !IsMine(pcoin->vout[i]) || !IsDenominated(vin)) continue; if(IsSpent(hash, i) || !IsMine(pcoin->vout[i]) || !IsDenominated(vin)) continue;
int rounds = GetInputDarksendRounds(vin); int rounds = GetInputDarksendRounds(vin);
nTotal += pcoin->vout[i].nValue * rounds / nDarksendRounds; nTotal += pcoin->vout[i].nValue * rounds / nDarksendRounds;
}
} }
} }
} }
@ -1304,7 +1302,7 @@ CAmount CWallet::GetNormalizedAnonymizedBalance() const
return nTotal; return nTotal;
} }
CAmount CWallet::GetDenominatedBalance(bool onlyDenom, bool onlyUnconfirmed, bool includeAlreadyAnonymized) const CAmount CWallet::GetDenominatedBalance(bool denom, bool unconfirmed, bool includeAlreadyAnonymized) const
{ {
CAmount nTotal = 0; CAmount nTotal = 0;
{ {
@ -1318,15 +1316,15 @@ CAmount CWallet::GetDenominatedBalance(bool onlyDenom, bool onlyUnconfirmed, boo
// skip conflicted // skip conflicted
if(nDepth < 0) continue; if(nDepth < 0) continue;
bool unconfirmed = (!IsFinalTx(*pcoin) || (!pcoin->IsTrusted() && nDepth == 0)); bool isUnconfirmed = (!IsFinalTx(*pcoin) || (!pcoin->IsTrusted() && nDepth == 0));
if(onlyUnconfirmed != unconfirmed) continue; if(unconfirmed != isUnconfirmed) continue;
uint256 hash = (*it).first; uint256 hash = (*it).first;
for (unsigned int i = 0; i < pcoin->vout.size(); i++) for (unsigned int i = 0; i < pcoin->vout.size(); i++)
{ {
if(IsSpent(hash, i)) continue; if(IsSpent(hash, i)) continue;
if(!IsMine(pcoin->vout[i])) continue; if(!IsMine(pcoin->vout[i])) continue;
if(onlyDenom != IsDenominatedAmount(pcoin->vout[i].nValue)) continue; if(denom != IsDenominatedAmount(pcoin->vout[i].nValue)) continue;
CTxIn vin = CTxIn(hash, i); CTxIn vin = CTxIn(hash, i);
int rounds = GetInputDarksendRounds(vin); int rounds = GetInputDarksendRounds(vin);

View File

@ -314,7 +314,7 @@ public:
CAmount GetAnonymizedBalance() const; CAmount GetAnonymizedBalance() const;
double GetAverageAnonymizedRounds() const; double GetAverageAnonymizedRounds() const;
CAmount GetNormalizedAnonymizedBalance() const; CAmount GetNormalizedAnonymizedBalance() const;
CAmount GetDenominatedBalance(bool onlyDenom=true, bool onlyUnconfirmed=false, bool includeAlreadyAnonymized = true) const; CAmount GetDenominatedBalance(bool denom=true, bool unconfirmed=false, bool includeAlreadyAnonymized = true) const;
CAmount GetWatchOnlyBalance() const; CAmount GetWatchOnlyBalance() const;
CAmount GetUnconfirmedWatchOnlyBalance() const; CAmount GetUnconfirmedWatchOnlyBalance() const;
CAmount GetImmatureWatchOnlyBalance() const; CAmount GetImmatureWatchOnlyBalance() const;