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:
commit
87207fbc36
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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);
|
||||||
|
@ -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;
|
||||||
|
Loading…
Reference in New Issue
Block a user