aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsje397 <sje397@gmail.com>2012-02-14 22:08:00 +1100
committersje397 <sje397@gmail.com>2012-05-25 23:15:27 +1000
commit8fdb7e108fbe77010799c8de95453a327dfa5777 (patch)
tree4d325aee1953b9044a22926f52909b92658ada56
parent6b8a17119e30ddc5dd5b92ed77da49740c495ed6 (diff)
Added 'immature balance' for miners. Only displayed if the balance is greater than zero.
This adds a field labelled 'Immature' in the overview section under the 'unconfirmed' field, which shows mined income that has not yet matured (which is currently not displayed anywhere, even though the transactions exist in the transaction list). To do that I added a 'GetImmatureBalance' method to the wallet, and connected that through to the GUI as per the 'GetBalance' and 'GetUnconfirmedBalance' methods. I did a small 'no-op' change to make the code in adjacent functions a little more readable (imo); it was a change I had made in my repo earlier...but I thought it wouldn't hurt so left it in. Immature balance comes from mined income that is at least two blocks deep in the chain (same logic as displayed transactions). My reasoning is: - as a miner, it's a critical stat I want to see - as a miner, and taking into account the label 'immature', the uncertainty is pretty clearly implied - those numbers are already displayed in the transaction list - this makes the overview numbers add up to what's in the transaction list - it's not displayed if the immature balance is 0, so won't bother non-miners I also 'cleaned' the overview UI a little, moving code to the XML and removing HTML.
-rw-r--r--src/qt/forms/overviewpage.ui32
-rw-r--r--src/qt/overviewpage.cpp20
-rw-r--r--src/qt/overviewpage.h3
-rw-r--r--src/qt/sendcoinsdialog.cpp7
-rw-r--r--src/qt/sendcoinsdialog.h2
-rw-r--r--src/qt/walletmodel.cpp15
-rw-r--r--src/qt/walletmodel.h4
-rw-r--r--src/wallet.cpp27
-rw-r--r--src/wallet.h1
9 files changed, 87 insertions, 24 deletions
diff --git a/src/qt/forms/overviewpage.ui b/src/qt/forms/overviewpage.ui
index 6573517b24..9d45e2e91a 100644
--- a/src/qt/forms/overviewpage.ui
+++ b/src/qt/forms/overviewpage.ui
@@ -6,7 +6,7 @@
<rect>
<x>0</x>
<y>0</y>
- <width>552</width>
+ <width>573</width>
<height>342</height>
</rect>
</property>
@@ -141,14 +141,14 @@
</property>
</widget>
</item>
- <item row="2" column="0">
+ <item row="3" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>Number of transactions:</string>
</property>
</widget>
</item>
- <item row="2" column="1">
+ <item row="3" column="1">
<widget class="QLabel" name="labelNumTransactions">
<property name="toolTip">
<string>Total number of transactions in wallet</string>
@@ -158,6 +158,32 @@
</property>
</widget>
</item>
+ <item row="2" column="0">
+ <widget class="QLabel" name="labelImmatureText">
+ <property name="text">
+ <string>Immature:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="1">
+ <widget class="QLabel" name="labelImmature">
+ <property name="font">
+ <font>
+ <weight>75</weight>
+ <bold>true</bold>
+ </font>
+ </property>
+ <property name="toolTip">
+ <string>Mined balance that has not yet matured</string>
+ </property>
+ <property name="text">
+ <string notr="true">0 BTC</string>
+ </property>
+ <property name="textInteractionFlags">
+ <set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set>
+ </property>
+ </widget>
+ </item>
</layout>
</item>
</layout>
diff --git a/src/qt/overviewpage.cpp b/src/qt/overviewpage.cpp
index d7bcc6f45e..35d48581e3 100644
--- a/src/qt/overviewpage.cpp
+++ b/src/qt/overviewpage.cpp
@@ -94,7 +94,9 @@ OverviewPage::OverviewPage(QWidget *parent) :
ui(new Ui::OverviewPage),
currentBalance(-1),
currentUnconfirmedBalance(-1),
- txdelegate(new TxViewDelegate()), filter(0)
+ currentImmatureBalance(-1),
+ txdelegate(new TxViewDelegate()),
+ filter(0)
{
ui->setupUi(this);
@@ -125,13 +127,21 @@ OverviewPage::~OverviewPage()
delete ui;
}
-void OverviewPage::setBalance(qint64 balance, qint64 unconfirmedBalance)
+void OverviewPage::setBalance(qint64 balance, qint64 unconfirmedBalance, qint64 immatureBalance)
{
int unit = model->getOptionsModel()->getDisplayUnit();
currentBalance = balance;
currentUnconfirmedBalance = unconfirmedBalance;
+ currentImmatureBalance = immatureBalance;
ui->labelBalance->setText(BitcoinUnits::formatWithUnit(unit, balance));
ui->labelUnconfirmed->setText(BitcoinUnits::formatWithUnit(unit, unconfirmedBalance));
+ ui->labelImmature->setText(BitcoinUnits::formatWithUnit(unit, immatureBalance));
+
+ // 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;
+ ui->labelImmature->setVisible(showImmature);
+ ui->labelImmatureText->setVisible(showImmature);
}
void OverviewPage::setNumTransactions(int count)
@@ -156,8 +166,8 @@ void OverviewPage::setModel(WalletModel *model)
ui->listTransactions->setModelColumn(TransactionTableModel::ToAddress);
// Keep up to date with wallet
- setBalance(model->getBalance(), model->getUnconfirmedBalance());
- connect(model, SIGNAL(balanceChanged(qint64, qint64)), this, SLOT(setBalance(qint64, qint64)));
+ setBalance(model->getBalance(), model->getUnconfirmedBalance(), model->getImmatureBalance());
+ connect(model, SIGNAL(balanceChanged(qint64, qint64, qint64)), this, SLOT(setBalance(qint64, qint64, qint64)));
setNumTransactions(model->getNumTransactions());
connect(model, SIGNAL(numTransactionsChanged(int)), this, SLOT(setNumTransactions(int)));
@@ -171,7 +181,7 @@ void OverviewPage::displayUnitChanged()
if(!model || !model->getOptionsModel())
return;
if(currentBalance != -1)
- setBalance(currentBalance, currentUnconfirmedBalance);
+ setBalance(currentBalance, currentUnconfirmedBalance, currentImmatureBalance);
txdelegate->unit = model->getOptionsModel()->getDisplayUnit();
ui->listTransactions->update();
diff --git a/src/qt/overviewpage.h b/src/qt/overviewpage.h
index 208b324feb..c7d3a4242c 100644
--- a/src/qt/overviewpage.h
+++ b/src/qt/overviewpage.h
@@ -27,7 +27,7 @@ public:
void showOutOfSyncWarning(bool fShow);
public slots:
- void setBalance(qint64 balance, qint64 unconfirmedBalance);
+ void setBalance(qint64 balance, qint64 unconfirmedBalance, qint64 immatureBalance);
void setNumTransactions(int count);
signals:
@@ -38,6 +38,7 @@ private:
WalletModel *model;
qint64 currentBalance;
qint64 currentUnconfirmedBalance;
+ qint64 currentImmatureBalance;
TxViewDelegate *txdelegate;
TransactionFilterProxy *filter;
diff --git a/src/qt/sendcoinsdialog.cpp b/src/qt/sendcoinsdialog.cpp
index f6a3047a2b..2eb228d1d4 100644
--- a/src/qt/sendcoinsdialog.cpp
+++ b/src/qt/sendcoinsdialog.cpp
@@ -48,8 +48,8 @@ void SendCoinsDialog::setModel(WalletModel *model)
}
if(model)
{
- setBalance(model->getBalance(), model->getUnconfirmedBalance());
- connect(model, SIGNAL(balanceChanged(qint64, qint64)), this, SLOT(setBalance(qint64, qint64)));
+ setBalance(model->getBalance(), model->getUnconfirmedBalance(), model->getImmatureBalance());
+ connect(model, SIGNAL(balanceChanged(qint64, qint64, qint64)), this, SLOT(setBalance(qint64, qint64, qint64)));
}
}
@@ -277,9 +277,10 @@ void SendCoinsDialog::handleURI(const QString &uri)
pasteEntry(rv);
}
-void SendCoinsDialog::setBalance(qint64 balance, qint64 unconfirmedBalance)
+void SendCoinsDialog::setBalance(qint64 balance, qint64 unconfirmedBalance, qint64 immatureBalance)
{
Q_UNUSED(unconfirmedBalance);
+ Q_UNUSED(immatureBalance);
if(!model || !model->getOptionsModel())
return;
diff --git a/src/qt/sendcoinsdialog.h b/src/qt/sendcoinsdialog.h
index 5dcbfbeb61..358c8cf85f 100644
--- a/src/qt/sendcoinsdialog.h
+++ b/src/qt/sendcoinsdialog.h
@@ -38,7 +38,7 @@ public slots:
void accept();
SendCoinsEntry *addEntry();
void updateRemoveEnabled();
- void setBalance(qint64 balance, qint64 unconfirmedBalance);
+ void setBalance(qint64 balance, qint64 unconfirmedBalance, qint64 immatureBalance);
private:
Ui::SendCoinsDialog *ui;
diff --git a/src/qt/walletmodel.cpp b/src/qt/walletmodel.cpp
index b89c3dba33..807dfc6bf8 100644
--- a/src/qt/walletmodel.cpp
+++ b/src/qt/walletmodel.cpp
@@ -13,7 +13,8 @@
WalletModel::WalletModel(CWallet *wallet, OptionsModel *optionsModel, QObject *parent) :
QObject(parent), wallet(wallet), optionsModel(optionsModel), addressTableModel(0),
transactionTableModel(0),
- cachedBalance(0), cachedUnconfirmedBalance(0), cachedNumTransactions(0),
+ cachedBalance(0), cachedUnconfirmedBalance(0), cachedImmatureBalance(0),
+ cachedNumTransactions(0),
cachedEncryptionStatus(Unencrypted)
{
addressTableModel = new AddressTableModel(wallet, this);
@@ -37,6 +38,11 @@ qint64 WalletModel::getUnconfirmedBalance() const
return wallet->GetUnconfirmedBalance();
}
+qint64 WalletModel::getImmatureBalance() const
+{
+ return wallet->GetImmatureBalance();
+}
+
int WalletModel::getNumTransactions() const
{
int numTransactions = 0;
@@ -63,15 +69,18 @@ void WalletModel::updateTransaction(const QString &hash, int status)
// Balance and number of transactions might have changed
qint64 newBalance = getBalance();
qint64 newUnconfirmedBalance = getUnconfirmedBalance();
+ qint64 newImmatureBalance = getImmatureBalance();
int newNumTransactions = getNumTransactions();
- if(cachedBalance != newBalance || cachedUnconfirmedBalance != newUnconfirmedBalance)
- emit balanceChanged(newBalance, newUnconfirmedBalance);
+ if(cachedBalance != newBalance || cachedUnconfirmedBalance != newUnconfirmedBalance || cachedImmatureBalance != newImmatureBalance)
+ emit balanceChanged(newBalance, newUnconfirmedBalance, newImmatureBalance);
+
if(cachedNumTransactions != newNumTransactions)
emit numTransactionsChanged(newNumTransactions);
cachedBalance = newBalance;
cachedUnconfirmedBalance = newUnconfirmedBalance;
+ cachedImmatureBalance = newImmatureBalance;
cachedNumTransactions = newNumTransactions;
}
diff --git a/src/qt/walletmodel.h b/src/qt/walletmodel.h
index 8b615ffe8e..c973c5cf53 100644
--- a/src/qt/walletmodel.h
+++ b/src/qt/walletmodel.h
@@ -52,6 +52,7 @@ public:
qint64 getBalance() const;
qint64 getUnconfirmedBalance() const;
+ qint64 getImmatureBalance() const;
int getNumTransactions() const;
EncryptionStatus getEncryptionStatus() const;
@@ -116,6 +117,7 @@ private:
// Cache some values to be able to detect changes
qint64 cachedBalance;
qint64 cachedUnconfirmedBalance;
+ qint64 cachedImmatureBalance;
qint64 cachedNumTransactions;
EncryptionStatus cachedEncryptionStatus;
@@ -123,7 +125,7 @@ private:
void unsubscribeFromCoreSignals();
signals:
// Signal that balance in wallet changed
- void balanceChanged(qint64 balance, qint64 unconfirmedBalance);
+ void balanceChanged(qint64 balance, qint64 unconfirmedBalance, qint64 immatureBalance);
// Number of transactions in wallet changed
void numTransactionsChanged(int count);
diff --git a/src/wallet.cpp b/src/wallet.cpp
index 62f663c0dc..f4863080ab 100644
--- a/src/wallet.cpp
+++ b/src/wallet.cpp
@@ -567,7 +567,7 @@ void CWalletTx::GetAmounts(int64& nGeneratedImmature, int64& nGeneratedMature, l
}
-void CWalletTx::GetAccountAmounts(const string& strAccount, int64& nGenerated, int64& nReceived,
+void CWalletTx::GetAccountAmounts(const string& strAccount, int64& nGenerated, int64& nReceived,
int64& nSent, int64& nFee) const
{
nGenerated = nReceived = nSent = nFee = 0;
@@ -851,9 +851,8 @@ int64 CWallet::GetBalance() const
for (map<uint256, CWalletTx>::const_iterator it = mapWallet.begin(); it != mapWallet.end(); ++it)
{
const CWalletTx* pcoin = &(*it).second;
- if (!pcoin->IsFinal() || !pcoin->IsConfirmed())
- continue;
- nTotal += pcoin->GetAvailableCredit();
+ if (pcoin->IsFinal() && pcoin->IsConfirmed())
+ nTotal += pcoin->GetAvailableCredit();
}
}
@@ -868,9 +867,23 @@ int64 CWallet::GetUnconfirmedBalance() const
for (map<uint256, CWalletTx>::const_iterator it = mapWallet.begin(); it != mapWallet.end(); ++it)
{
const CWalletTx* pcoin = &(*it).second;
- if (pcoin->IsFinal() && pcoin->IsConfirmed())
- continue;
- nTotal += pcoin->GetAvailableCredit();
+ if (!pcoin->IsFinal() || !pcoin->IsConfirmed())
+ nTotal += pcoin->GetAvailableCredit();
+ }
+ }
+ return nTotal;
+}
+
+int64 CWallet::GetImmatureBalance() const
+{
+ int64 nTotal = 0;
+ {
+ LOCK(cs_wallet);
+ for (map<uint256, CWalletTx>::const_iterator it = mapWallet.begin(); it != mapWallet.end(); ++it)
+ {
+ const CWalletTx& pcoin = (*it).second;
+ if (pcoin.IsCoinBase() && pcoin.GetBlocksToMaturity() > 0 && pcoin.GetDepthInMainChain() >= 2)
+ nTotal += GetCredit(pcoin);
}
}
return nTotal;
diff --git a/src/wallet.h b/src/wallet.h
index 57633c4aa3..c29dd738ff 100644
--- a/src/wallet.h
+++ b/src/wallet.h
@@ -144,6 +144,7 @@ public:
void ResendWalletTransactions();
int64 GetBalance() const;
int64 GetUnconfirmedBalance() const;
+ int64 GetImmatureBalance() const;
bool CreateTransaction(const std::vector<std::pair<CScript, int64> >& vecSend, CWalletTx& wtxNew, CReserveKey& reservekey, int64& nFeeRet);
bool CreateTransaction(CScript scriptPubKey, int64 nValue, CWalletTx& wtxNew, CReserveKey& reservekey, int64& nFeeRet);
bool CommitTransaction(CWalletTx& wtxNew, CReserveKey& reservekey);