make initial block download reporting somewhat better by tracking version responses
This commit is contained in:
parent
b5f918cbd6
commit
5df0b03c95
7 changed files with 49 additions and 16 deletions
|
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -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();
|
||||
|
@ -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)
|
||||
|
|
|
@ -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.
|
||||
|
@ -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
|
||||
|
|
|
@ -42,6 +42,9 @@ private:
|
|||
|
||||
OptionsModel *optionsModel;
|
||||
|
||||
int cachedNumConnections;
|
||||
int cachedNumBlocks;
|
||||
|
||||
signals:
|
||||
void numConnectionsChanged(int count);
|
||||
void numBlocksChanged(int count);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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.
|
||||
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -73,6 +73,10 @@ private:
|
|||
AddressTableModel *addressTableModel;
|
||||
TransactionTableModel *transactionTableModel;
|
||||
|
||||
qint64 cachedBalance;
|
||||
qint64 cachedUnconfirmedBalance;
|
||||
qint64 cachedNumTransactions;
|
||||
|
||||
signals:
|
||||
void balanceChanged(qint64 balance, qint64 unconfirmedBalance);
|
||||
void numTransactionsChanged(int count);
|
||||
|
|
Loading…
Reference in a new issue