Skip to content

Commit

Permalink
make initial block download reporting somewhat better by tracking ver…
Browse files Browse the repository at this point in the history
…sion responses
  • Loading branch information
laanwj committed Jul 17, 2011
1 parent b5f918c commit 5df0b03
Show file tree
Hide file tree
Showing 7 changed files with 49 additions and 16 deletions.
6 changes: 5 additions & 1 deletion src/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ map<COutPoint, CInPoint> mapNextTx;
map<uint256, CBlockIndex*> mapBlockIndex;
uint256 hashGenesisBlock("0x000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f");
CBigNum bnProofOfWorkLimit(~uint256(0) >> 32);
const int nTotalBlocksEstimate = 134444; // Conservative estimate of total nr of blocks on main chain
int nTotalBlocksEstimate = 134444; // Conservative estimate of total nr of blocks on main chain
const int nInitialBlockThreshold = 120; // Regard blocks up until N-threshold as "initial download"
CBlockIndex* pindexGenesisBlock = NULL;
int nBestHeight = -1;
Expand Down Expand Up @@ -1869,6 +1869,10 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv)
pfrom->fSuccessfullyConnected = true;

printf("version message: version %d, blocks=%d\n", pfrom->nVersion, pfrom->nStartingHeight);
if(pfrom->nStartingHeight > nTotalBlocksEstimate)
{
nTotalBlocksEstimate = pfrom->nStartingHeight;
}
}


Expand Down
11 changes: 9 additions & 2 deletions src/qt/bitcoingui.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -292,17 +292,21 @@ void BitcoinGUI::setNumConnections(int count)
void BitcoinGUI::setNumBlocks(int count)
{
int total = clientModel->getTotalBlocksEstimate();
QString tooltip;

if(count < total)
{
progressBarLabel->setVisible(true);
progressBar->setVisible(true);
progressBar->setMaximum(total);
progressBar->setValue(count);
tooltip = tr("Downloaded %1 of %2 blocks of transaction history.").arg(count).arg(total);
}
else
{
progressBarLabel->setVisible(false);
progressBar->setVisible(false);
tooltip = tr("Downloaded %1 blocks of transaction history.").arg(count);
}

QDateTime now = QDateTime::currentDateTime();
Expand All @@ -329,10 +333,13 @@ void BitcoinGUI::setNumBlocks(int count)
{
text = tr("%n day(s) ago","",secs/(60*60*24));
}
tooltip += QString("\n");
tooltip += tr("Last block was generated %1.").arg(QLocale::system().toString(lastBlockDate));

labelBlocks->setText("<img src=\""+icon+"\"> " + text);
labelBlocks->setToolTip(tr("Downloaded %n block(s) of transaction history. Last block was generated %1.", "", count)
.arg(QLocale::system().toString(lastBlockDate)));
labelBlocks->setToolTip(tooltip);
progressBarLabel->setToolTip(tooltip);
progressBar->setToolTip(tooltip);
}

void BitcoinGUI::error(const QString &title, const QString &message)
Expand Down
18 changes: 12 additions & 6 deletions src/qt/clientmodel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@
#include <QDateTime>

ClientModel::ClientModel(CWallet *wallet, QObject *parent) :
QObject(parent), wallet(wallet), optionsModel(0)
QObject(parent), wallet(wallet), optionsModel(0),
cachedNumConnections(0), cachedNumBlocks(0)
{
// Until signal notifications is built into the bitcoin core,
// simply update everything after polling using a timer.
Expand Down Expand Up @@ -38,11 +39,16 @@ QDateTime ClientModel::getLastBlockDate() const

void ClientModel::update()
{
// Plainly emit all signals for now. To be more efficient this should check
// whether the values actually changed first, although it'd be even better if these
// were events coming in from the bitcoin core.
emit numConnectionsChanged(getNumConnections());
emit numBlocksChanged(getNumBlocks());
int newNumConnections = getNumConnections();
int newNumBlocks = getNumBlocks();

if(cachedNumConnections != newNumConnections)
emit numConnectionsChanged(newNumConnections);
if(cachedNumBlocks != newNumBlocks)
emit numBlocksChanged(newNumBlocks);

cachedNumConnections = newNumConnections;
cachedNumBlocks = newNumBlocks;
}

bool ClientModel::isTestNet() const
Expand Down
3 changes: 3 additions & 0 deletions src/qt/clientmodel.h
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,9 @@ class ClientModel : public QObject

OptionsModel *optionsModel;

int cachedNumConnections;
int cachedNumBlocks;

signals:
void numConnectionsChanged(int count);
void numBlocksChanged(int count);
Expand Down
2 changes: 1 addition & 1 deletion src/qt/guiconstants.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
#define GUICONSTANTS_H

/* milliseconds between model updates */
static const int MODEL_UPDATE_DELAY = 250;
static const int MODEL_UPDATE_DELAY = 500;

/* size of cache */
static const unsigned int WALLET_CACHE_SIZE = 100;
Expand Down
21 changes: 15 additions & 6 deletions src/qt/walletmodel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@

WalletModel::WalletModel(CWallet *wallet, QObject *parent) :
QObject(parent), wallet(wallet), optionsModel(0), addressTableModel(0),
transactionTableModel(0)
transactionTableModel(0),
cachedBalance(0), cachedUnconfirmedBalance(0), cachedNumTransactions(0)
{
// Until signal notifications is built into the bitcoin core,
// simply update everything after polling using a timer.
Expand Down Expand Up @@ -46,11 +47,19 @@ int WalletModel::getNumTransactions() const

void WalletModel::update()
{
// Plainly emit all signals for now. To be more efficient this should check
// whether the values actually changed first, although it'd be even better if these
// were events coming in from the bitcoin core.
emit balanceChanged(getBalance(), wallet->GetUnconfirmedBalance());
emit numTransactionsChanged(getNumTransactions());
qint64 newBalance = getBalance();
qint64 newUnconfirmedBalance = getUnconfirmedBalance();
int newNumTransactions = getNumTransactions();

if(cachedBalance != newBalance || cachedUnconfirmedBalance != newUnconfirmedBalance)
emit balanceChanged(newBalance, newUnconfirmedBalance);

if(cachedNumTransactions != newNumTransactions)
emit numTransactionsChanged(newNumTransactions);

cachedBalance = newBalance;
cachedUnconfirmedBalance = newUnconfirmedBalance;
cachedNumTransactions = newNumTransactions;

addressTableModel->update();
}
Expand Down
4 changes: 4 additions & 0 deletions src/qt/walletmodel.h
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,10 @@ class WalletModel : public QObject
AddressTableModel *addressTableModel;
TransactionTableModel *transactionTableModel;

qint64 cachedBalance;
qint64 cachedUnconfirmedBalance;
qint64 cachedNumTransactions;

signals:
void balanceChanged(qint64 balance, qint64 unconfirmedBalance);
void numTransactionsChanged(int count);
Expand Down

0 comments on commit 5df0b03

Please sign in to comment.