From 6484a9e9b229bba73f28fdd489c0455d3f53febe Mon Sep 17 00:00:00 2001 From: janko33bd Date: Mon, 15 Jan 2018 23:28:59 +0100 Subject: [PATCH] add stake to gui --- src/qt/forms/overviewpage.ui | 115 +++++++++++++++++++++++++++++++++-- src/qt/overviewpage.cpp | 31 +++++++--- src/qt/overviewpage.h | 6 +- src/qt/sendcoinsdialog.cpp | 14 +++-- src/qt/sendcoinsdialog.h | 4 +- src/qt/walletmodel.cpp | 35 +++++++++-- src/qt/walletmodel.h | 9 ++- src/wallet/wallet.cpp | 29 ++++++--- src/wallet/wallet.h | 3 +- 9 files changed, 207 insertions(+), 39 deletions(-) diff --git a/src/qt/forms/overviewpage.ui b/src/qt/forms/overviewpage.ui index 4a6ee9250..f08d14f51 100644 --- a/src/qt/forms/overviewpage.ui +++ b/src/qt/forms/overviewpage.ui @@ -189,14 +189,14 @@ - + Qt::Horizontal - + @@ -215,7 +215,7 @@ - + Total: @@ -267,7 +267,7 @@ - + @@ -292,7 +292,7 @@ - + @@ -401,6 +401,111 @@ + + + + Stake: + + + + + + + + 75 + true + + + + 0.000 000 00 BTC + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse + + + + + + + + 75 + true + + + + 0.000 000 00 BTC + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 25 + + + + + + + + Qt::Horizontal + + + + + + + 12 + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + diff --git a/src/qt/overviewpage.cpp b/src/qt/overviewpage.cpp index 5b9b39514..77c60554a 100644 --- a/src/qt/overviewpage.cpp +++ b/src/qt/overviewpage.cpp @@ -116,9 +116,11 @@ OverviewPage::OverviewPage(const PlatformStyle *platformStyle, QWidget *parent) currentBalance(-1), currentUnconfirmedBalance(-1), currentImmatureBalance(-1), + currentStake(-1), currentWatchOnlyBalance(-1), currentWatchUnconfBalance(-1), currentWatchImmatureBalance(-1), + currentWatchOnlyStake(-1), txdelegate(new TxViewDelegate(platformStyle, this)) { ui->setupUi(this); @@ -152,33 +154,43 @@ OverviewPage::~OverviewPage() delete ui; } -void OverviewPage::setBalance(const CAmount& balance, const CAmount& unconfirmedBalance, const CAmount& immatureBalance, const CAmount& watchOnlyBalance, const CAmount& watchUnconfBalance, const CAmount& watchImmatureBalance) +void OverviewPage::setBalance(const CAmount& balance, const CAmount& unconfirmedBalance, const CAmount& immatureBalance, const CAmount& stake, const CAmount& watchOnlyBalance, const CAmount& watchUnconfBalance, const CAmount& watchImmatureBalance, const CAmount& watchOnlyStake) { int unit = walletModel->getOptionsModel()->getDisplayUnit(); currentBalance = balance; currentUnconfirmedBalance = unconfirmedBalance; currentImmatureBalance = immatureBalance; + currentStake = stake; currentWatchOnlyBalance = watchOnlyBalance; currentWatchUnconfBalance = watchUnconfBalance; currentWatchImmatureBalance = watchImmatureBalance; + currentWatchOnlyStake = watchOnlyStake; ui->labelBalance->setText(BitcoinUnits::formatWithUnit(unit, balance, false, BitcoinUnits::separatorAlways)); ui->labelUnconfirmed->setText(BitcoinUnits::formatWithUnit(unit, unconfirmedBalance, false, BitcoinUnits::separatorAlways)); ui->labelImmature->setText(BitcoinUnits::formatWithUnit(unit, immatureBalance, false, BitcoinUnits::separatorAlways)); - ui->labelTotal->setText(BitcoinUnits::formatWithUnit(unit, balance + unconfirmedBalance + immatureBalance, false, BitcoinUnits::separatorAlways)); + ui->labelStake->setText(BitcoinUnits::formatWithUnit(unit, stake, false, BitcoinUnits::separatorAlways)); + ui->labelTotal->setText(BitcoinUnits::formatWithUnit(unit, balance + unconfirmedBalance + immatureBalance + stake, false, BitcoinUnits::separatorAlways)); ui->labelWatchAvailable->setText(BitcoinUnits::formatWithUnit(unit, watchOnlyBalance, false, BitcoinUnits::separatorAlways)); ui->labelWatchPending->setText(BitcoinUnits::formatWithUnit(unit, watchUnconfBalance, false, BitcoinUnits::separatorAlways)); ui->labelWatchImmature->setText(BitcoinUnits::formatWithUnit(unit, watchImmatureBalance, false, BitcoinUnits::separatorAlways)); - ui->labelWatchTotal->setText(BitcoinUnits::formatWithUnit(unit, watchOnlyBalance + watchUnconfBalance + watchImmatureBalance, false, BitcoinUnits::separatorAlways)); + ui->labelWatchStake->setText(BitcoinUnits::formatWithUnit(unit, watchOnlyStake, false, BitcoinUnits::separatorAlways)); + ui->labelWatchTotal->setText(BitcoinUnits::formatWithUnit(unit, watchOnlyBalance + watchUnconfBalance + watchImmatureBalance + watchOnlyStake, false, BitcoinUnits::separatorAlways)); // only show immature (newly mined) balance if it's non-zero, so as not to complicate things // for the non-mining users bool showImmature = immatureBalance != 0; + bool showStake = stake != 0; bool showWatchOnlyImmature = watchImmatureBalance != 0; + bool showWatchOnlyStake = watchOnlyStake != 0; // for symmetry reasons also show immature label when the watch-only one is shown ui->labelImmature->setVisible(showImmature || showWatchOnlyImmature); ui->labelImmatureText->setVisible(showImmature || showWatchOnlyImmature); ui->labelWatchImmature->setVisible(showWatchOnlyImmature); // show watch-only immature balance + ui->labelStake->setVisible(showStake || showWatchOnlyStake); + ui->labelStakeText->setVisible(showStake || showWatchOnlyStake); + ui->labelWatchStake->setVisible(showWatchOnlyStake); // show watch-only stake balance + } // show/hide watch-only labels @@ -192,7 +204,10 @@ void OverviewPage::updateWatchOnlyLabels(bool showWatchOnly) ui->labelWatchTotal->setVisible(showWatchOnly); // show watch-only total balance if (!showWatchOnly) + { ui->labelWatchImmature->hide(); + ui->labelWatchStake->hide(); + } } void OverviewPage::setClientModel(ClientModel *model) @@ -224,9 +239,9 @@ void OverviewPage::setWalletModel(WalletModel *model) ui->listTransactions->setModelColumn(TransactionTableModel::ToAddress); // Keep up to date with wallet - setBalance(model->getBalance(), model->getUnconfirmedBalance(), model->getImmatureBalance(), - model->getWatchBalance(), model->getWatchUnconfirmedBalance(), model->getWatchImmatureBalance()); - connect(model, SIGNAL(balanceChanged(CAmount,CAmount,CAmount,CAmount,CAmount,CAmount)), this, SLOT(setBalance(CAmount,CAmount,CAmount,CAmount,CAmount,CAmount))); + setBalance(model->getBalance(), model->getUnconfirmedBalance(), model->getImmatureBalance(), model->getStake(), + model->getWatchBalance(), model->getWatchUnconfirmedBalance(), model->getWatchImmatureBalance(), model->getWatchStake()); + connect(model, SIGNAL(balanceChanged(CAmount,CAmount,CAmount,CAmount,CAmount,CAmount,CAmount,CAmount)), this, SLOT(setBalance(CAmount,CAmount,CAmount,CAmount,CAmount,CAmount,CAmount,CAmount))); connect(model->getOptionsModel(), SIGNAL(displayUnitChanged(int)), this, SLOT(updateDisplayUnit())); @@ -243,8 +258,8 @@ void OverviewPage::updateDisplayUnit() if(walletModel && walletModel->getOptionsModel()) { if(currentBalance != -1) - setBalance(currentBalance, currentUnconfirmedBalance, currentImmatureBalance, - currentWatchOnlyBalance, currentWatchUnconfBalance, currentWatchImmatureBalance); + setBalance(currentBalance, currentUnconfirmedBalance, currentImmatureBalance, currentStake, + currentWatchOnlyBalance, currentWatchUnconfBalance, currentWatchImmatureBalance, currentWatchOnlyStake); // Update txdelegate->unit with the current unit txdelegate->unit = walletModel->getOptionsModel()->getDisplayUnit(); diff --git a/src/qt/overviewpage.h b/src/qt/overviewpage.h index 23746a6b4..a08a1ecd4 100644 --- a/src/qt/overviewpage.h +++ b/src/qt/overviewpage.h @@ -38,8 +38,8 @@ public: void showOutOfSyncWarning(bool fShow); public Q_SLOTS: - void setBalance(const CAmount& balance, const CAmount& unconfirmedBalance, const CAmount& immatureBalance, - const CAmount& watchOnlyBalance, const CAmount& watchUnconfBalance, const CAmount& watchImmatureBalance); + void setBalance(const CAmount& balance, const CAmount& unconfirmedBalance, const CAmount& immatureBalance, const CAmount& stake, + const CAmount& watchOnlyBalance, const CAmount& watchUnconfBalance, const CAmount& watchImmatureBalance, const CAmount& watchOnlyStake); Q_SIGNALS: void transactionClicked(const QModelIndex &index); @@ -51,9 +51,11 @@ private: CAmount currentBalance; CAmount currentUnconfirmedBalance; CAmount currentImmatureBalance; + CAmount currentStake; CAmount currentWatchOnlyBalance; CAmount currentWatchUnconfBalance; CAmount currentWatchImmatureBalance; + CAmount currentWatchOnlyStake; TxViewDelegate *txdelegate; std::unique_ptr filter; diff --git a/src/qt/sendcoinsdialog.cpp b/src/qt/sendcoinsdialog.cpp index 8687f29b0..c063fa27e 100644 --- a/src/qt/sendcoinsdialog.cpp +++ b/src/qt/sendcoinsdialog.cpp @@ -143,9 +143,9 @@ void SendCoinsDialog::setModel(WalletModel *model) } } - setBalance(model->getBalance(), model->getUnconfirmedBalance(), model->getImmatureBalance(), - model->getWatchBalance(), model->getWatchUnconfirmedBalance(), model->getWatchImmatureBalance()); - connect(model, SIGNAL(balanceChanged(CAmount,CAmount,CAmount,CAmount,CAmount,CAmount)), this, SLOT(setBalance(CAmount,CAmount,CAmount,CAmount,CAmount,CAmount))); + setBalance(model->getBalance(), model->getUnconfirmedBalance(), model->getImmatureBalance(), model->getStake(), + model->getWatchBalance(), model->getWatchUnconfirmedBalance(), model->getWatchImmatureBalance(), model->getWatchStake()); + connect(model, SIGNAL(balanceChanged(CAmount,CAmount,CAmount,CAmount,CAmount,CAmount,CAmount,CAmount)), this, SLOT(setBalance(CAmount,CAmount,CAmount,CAmount,CAmount,CAmount,CAmount,CAmount))); connect(model->getOptionsModel(), SIGNAL(displayUnitChanged(int)), this, SLOT(updateDisplayUnit())); updateDisplayUnit(); @@ -470,14 +470,16 @@ bool SendCoinsDialog::handlePaymentRequest(const SendCoinsRecipient &rv) return true; } -void SendCoinsDialog::setBalance(const CAmount& balance, const CAmount& unconfirmedBalance, const CAmount& immatureBalance, - const CAmount& watchBalance, const CAmount& watchUnconfirmedBalance, const CAmount& watchImmatureBalance) +void SendCoinsDialog::setBalance(const CAmount& balance, const CAmount& unconfirmedBalance, const CAmount& immatureBalance, const CAmount& stake, + const CAmount& watchBalance, const CAmount& watchUnconfirmedBalance, const CAmount& watchImmatureBalance, const CAmount& watchStake) { Q_UNUSED(unconfirmedBalance); Q_UNUSED(immatureBalance); Q_UNUSED(watchBalance); + Q_UNUSED(stake); Q_UNUSED(watchUnconfirmedBalance); Q_UNUSED(watchImmatureBalance); + Q_UNUSED(watchStake); if(model && model->getOptionsModel()) { @@ -487,7 +489,7 @@ void SendCoinsDialog::setBalance(const CAmount& balance, const CAmount& unconfir void SendCoinsDialog::updateDisplayUnit() { - setBalance(model->getBalance(), 0, 0, 0, 0, 0); + setBalance(model->getBalance(), 0, 0, 0, 0, 0, 0, 0); ui->customFee->setDisplayUnit(model->getOptionsModel()->getDisplayUnit()); updateMinFeeLabel(); updateSmartFeeLabel(); diff --git a/src/qt/sendcoinsdialog.h b/src/qt/sendcoinsdialog.h index be4f2ee44..f20c2879e 100644 --- a/src/qt/sendcoinsdialog.h +++ b/src/qt/sendcoinsdialog.h @@ -54,8 +54,8 @@ public Q_SLOTS: void accept(); SendCoinsEntry *addEntry(); void updateTabsAndLabels(); - void setBalance(const CAmount& balance, const CAmount& unconfirmedBalance, const CAmount& immatureBalance, - const CAmount& watchOnlyBalance, const CAmount& watchUnconfBalance, const CAmount& watchImmatureBalance); + void setBalance(const CAmount& balance, const CAmount& unconfirmedBalance, const CAmount& immatureBalance, const CAmount& stake, + const CAmount& watchOnlyBalance, const CAmount& watchUnconfBalance, const CAmount& watchImmatureBalance, const CAmount& watchOnlyStake); private: Ui::SendCoinsDialog *ui; diff --git a/src/qt/walletmodel.cpp b/src/qt/walletmodel.cpp index 544c319bb..f333b2772 100644 --- a/src/qt/walletmodel.cpp +++ b/src/qt/walletmodel.cpp @@ -30,9 +30,17 @@ WalletModel::WalletModel(const PlatformStyle *platformStyle, CWallet *wallet, Op QObject(parent), wallet(wallet), optionsModel(optionsModel), addressTableModel(0), transactionTableModel(0), recentRequestsTableModel(0), - cachedBalance(0), cachedUnconfirmedBalance(0), cachedImmatureBalance(0), + cachedBalance(0), + cachedUnconfirmedBalance(0), + cachedImmatureBalance(0), + cachedStake(0), + cachedWatchOnlyBalance(0), + cachedWatchUnconfBalance(0), + cachedWatchImmatureBalance(0), + cachedWatchOnlyStake(0), cachedEncryptionStatus(Unencrypted), - cachedNumBlocks(0) + cachedNumBlocks(0) + { fHaveWatchOnly = wallet->HaveWatchOnly(); fForceCheckBalanceChanged = false; @@ -71,6 +79,16 @@ CAmount WalletModel::getBalance(const CCoinControl *coinControl) const return wallet->GetBalance(); } +CAmount WalletModel::getStake() const +{ + return wallet->GetStake(); +} + +CAmount WalletModel::getWatchStake() const +{ + return wallet->GetWatchOnlyStake(); +} + CAmount WalletModel::getUnconfirmedBalance() const { return wallet->GetUnconfirmedBalance(); @@ -139,27 +157,32 @@ void WalletModel::checkBalanceChanged() CAmount newBalance = getBalance(); CAmount newUnconfirmedBalance = getUnconfirmedBalance(); CAmount newImmatureBalance = getImmatureBalance(); + CAmount newStake = getStake(); CAmount newWatchOnlyBalance = 0; CAmount newWatchUnconfBalance = 0; CAmount newWatchImmatureBalance = 0; + CAmount newWatchOnlyStake = 0; if (haveWatchOnly()) { newWatchOnlyBalance = getWatchBalance(); newWatchUnconfBalance = getWatchUnconfirmedBalance(); newWatchImmatureBalance = getWatchImmatureBalance(); + newWatchOnlyStake = getWatchStake(); } if(cachedBalance != newBalance || cachedUnconfirmedBalance != newUnconfirmedBalance || cachedImmatureBalance != newImmatureBalance || - cachedWatchOnlyBalance != newWatchOnlyBalance || cachedWatchUnconfBalance != newWatchUnconfBalance || cachedWatchImmatureBalance != newWatchImmatureBalance) + cachedWatchOnlyBalance != newWatchOnlyBalance || cachedWatchUnconfBalance != newWatchUnconfBalance || cachedWatchImmatureBalance != newWatchImmatureBalance || cachedStake != newStake || cachedWatchOnlyStake != newWatchOnlyStake) { cachedBalance = newBalance; cachedUnconfirmedBalance = newUnconfirmedBalance; cachedImmatureBalance = newImmatureBalance; + cachedStake = newStake; cachedWatchOnlyBalance = newWatchOnlyBalance; cachedWatchUnconfBalance = newWatchUnconfBalance; cachedWatchImmatureBalance = newWatchImmatureBalance; - Q_EMIT balanceChanged(newBalance, newUnconfirmedBalance, newImmatureBalance, - newWatchOnlyBalance, newWatchUnconfBalance, newWatchImmatureBalance); + cachedWatchOnlyStake = newWatchOnlyStake; + Q_EMIT balanceChanged(newBalance, newUnconfirmedBalance, newImmatureBalance, newStake, + newWatchOnlyBalance, newWatchUnconfBalance, newWatchImmatureBalance, newWatchOnlyStake); } } @@ -692,4 +715,4 @@ bool WalletModel::abandonTransaction(uint256 hash) const bool WalletModel::hdEnabled() const { return wallet->IsHDEnabled(); -} \ No newline at end of file +} diff --git a/src/qt/walletmodel.h b/src/qt/walletmodel.h index 978fedec1..39fd61422 100644 --- a/src/qt/walletmodel.h +++ b/src/qt/walletmodel.h @@ -133,10 +133,12 @@ public: CAmount getBalance(const CCoinControl *coinControl = NULL) const; CAmount getUnconfirmedBalance() const; CAmount getImmatureBalance() const; + CAmount getStake() const; bool haveWatchOnly() const; CAmount getWatchBalance() const; CAmount getWatchUnconfirmedBalance() const; CAmount getWatchImmatureBalance() const; + CAmount getWatchStake() const; EncryptionStatus getEncryptionStatus() const; // Check address for validity @@ -222,9 +224,11 @@ private: CAmount cachedBalance; CAmount cachedUnconfirmedBalance; CAmount cachedImmatureBalance; + CAmount cachedStake; CAmount cachedWatchOnlyBalance; CAmount cachedWatchUnconfBalance; CAmount cachedWatchImmatureBalance; + CAmount cachedWatchOnlyStake; EncryptionStatus cachedEncryptionStatus; int cachedNumBlocks; @@ -236,8 +240,9 @@ private: Q_SIGNALS: // Signal that balance in wallet changed - void balanceChanged(const CAmount& balance, const CAmount& unconfirmedBalance, const CAmount& immatureBalance, - const CAmount& watchOnlyBalance, const CAmount& watchUnconfBalance, const CAmount& watchImmatureBalance); + void balanceChanged(const CAmount& balance, const CAmount& unconfirmedBalance, const CAmount& immatureBalance, const CAmount& stake, + const CAmount& watchOnlyBalance, const CAmount& watchUnconfBalance, const CAmount& watchImmatureBalance, const CAmount& watchOnlyStake); + // Encryption status of wallet changed void encryptionStatusChanged(int status); diff --git a/src/wallet/wallet.cpp b/src/wallet/wallet.cpp index adce98601..206a001b5 100644 --- a/src/wallet/wallet.cpp +++ b/src/wallet/wallet.cpp @@ -2193,16 +2193,16 @@ CAmount CWallet::GetImmatureBalance() const return nTotal; } -CAmount CWallet::GetStakeBalance() const +// ppcoin: total coins staked (non-spendable until maturity) +CAmount CWallet::GetStake() const { CAmount nTotal = 0; + LOCK2(cs_main, cs_wallet); + for (map::const_iterator it = mapWallet.begin(); it != mapWallet.end(); ++it) { - LOCK2(cs_main, cs_wallet); - for (map::const_iterator it = mapWallet.begin(); it != mapWallet.end(); ++it) - { - const CWalletTx* pcoin = &(*it).second; - nTotal += pcoin->GetImmatureStakeCredit(); - } + const CWalletTx* pcoin = &(*it).second; + if (pcoin->IsCoinStake() && pcoin->GetBlocksToMaturity() > 0 && pcoin->GetDepthInMainChain() > 0) + nTotal += CWallet::GetCredit(*pcoin, ISMINE_SPENDABLE); } return nTotal; } @@ -2341,6 +2341,21 @@ static void ApproximateBestSubset(vector::const_iterator it = mapWallet.begin(); it != mapWallet.end(); ++it) + { + const CWalletTx* pcoin = &(*it).second; + if (pcoin->IsCoinStake() && pcoin->GetBlocksToMaturity() > 0 && pcoin->GetDepthInMainChain() > 0) + nTotal += CWallet::GetCredit(*pcoin, ISMINE_WATCH_ONLY); + } + return nTotal; +} + bool CWallet::SelectCoinsMinConf(const CAmount& nTargetValue, int nConfMine, int nConfTheirs, vector vCoins, set >& setCoinsRet, CAmount& nValueRet) const { diff --git a/src/wallet/wallet.h b/src/wallet/wallet.h index 31420d6d3..140277c68 100644 --- a/src/wallet/wallet.h +++ b/src/wallet/wallet.h @@ -752,7 +752,8 @@ public: CAmount GetBalance() const; CAmount GetUnconfirmedBalance() const; CAmount GetImmatureBalance() const; - CAmount GetStakeBalance() const; + CAmount GetStake() const; + CAmount GetWatchOnlyStake() const; CAmount GetWatchOnlyBalance() const; CAmount GetUnconfirmedWatchOnlyBalance() const; CAmount GetImmatureWatchOnlyBalance() const;