void BitcoinGUI::updateStakingIcon() { uint64_t nMinWeight = 0, nMaxWeight = 0, nWeight = 0; if (pwalletMain) pwalletMain->GetStakeWeight(*pwalletMain, nMinWeight, nMaxWeight, nWeight); if(walletModel) fMultiSend = pwalletMain->fMultiSend; uint64_t nNetworkWeight = GetPoSKernelPS(); unsigned nEstimateTime = nTargetSpacing * nNetworkWeight / nWeight; if (pwalletMain && pwalletMain->IsLocked()) { labelStakingIcon->setToolTip(tr("Not minting because wallet is locked.<br>Network weight is %1.<br>MultiSend: %2").arg(nNetworkWeight).arg(fMultiSend ? tr("Active"):tr("Not Active"))); labelStakingIcon->setEnabled(false); labelStakingIcon->setPixmap(QIcon(":/icons/staking_off").pixmap(STATUSBAR_ICONSIZE, STATUSBAR_ICONSIZE)); } else if (vNodes.empty()) { labelStakingIcon->setToolTip(tr("Not minting because wallet is offline.<br>Network weight is %1.<br>MultiSend: %2").arg(nNetworkWeight).arg(fMultiSend ? tr("Active"):tr("Not Active"))); labelStakingIcon->setEnabled(false); labelStakingIcon->setPixmap(QIcon(":/icons/staking_off").pixmap(STATUSBAR_ICONSIZE, STATUSBAR_ICONSIZE)); } else if (IsInitialBlockDownload()) { labelStakingIcon->setToolTip(tr("Not minting because wallet is syncing.<br>Network weight is %1.<br>MultiSend: %2").arg(nNetworkWeight).arg(fMultiSend ? tr("Active"):tr("Not Active"))); labelStakingIcon->setEnabled(false); labelStakingIcon->setPixmap(QIcon(":/icons/staking_off").pixmap(STATUSBAR_ICONSIZE, STATUSBAR_ICONSIZE)); } else if (!nWeight) { labelStakingIcon->setToolTip(tr("Not minting because you don't have mature coins.<br>Network weight is %1<br>MultiSend: %2").arg(nNetworkWeight).arg(fMultiSend ? tr("Active"):tr("Not Active"))); labelStakingIcon->setEnabled(false); labelStakingIcon->setPixmap(QIcon(":/icons/staking_off").pixmap(STATUSBAR_ICONSIZE, STATUSBAR_ICONSIZE)); } else if (nLastCoinStakeSearchInterval) { uint64_t nAccuracyAdjustment = 1; // this is a manual adjustment param if needed to make more accurate uint64_t nEstimateTime = 60 * nNetworkWeight / nWeight / nAccuracyAdjustment; uint64_t nRangeLow = nEstimateTime; uint64_t nRangeHigh = nEstimateTime * 1.5; QString text; if (nEstimateTime < 60) { text = tr("%1 - %2 seconds").arg(nRangeLow).arg(nRangeHigh); } else if (nEstimateTime < 60*60) { text = tr("%1 - %2 minutes").arg(nRangeLow / 60).arg(nRangeHigh / 60); } else if (nEstimateTime < 24*60*60) { text = tr("%1 - %2 hours").arg(nRangeLow / (60*60)).arg(nRangeHigh / (60*60)); } else { text = tr("%1 - %2 days").arg(nRangeLow / (60*60*24)).arg(nRangeHigh / (60*60*24)); } labelStakingIcon->setPixmap(QIcon(":/icons/staking_on").pixmap(STATUSBAR_ICONSIZE,STATUSBAR_ICONSIZE)); labelStakingIcon->setEnabled(true); labelStakingIcon->setToolTip(tr("Minting.<br>Your weight is %1.<br>Network weight is %2.<br><b>Estimated</b> next stake in %3.<br>MultiSend: %4").arg(nWeight).arg(nNetworkWeight).arg(text).arg(fMultiSend ? tr("Active"):tr("Not Active"))); } else { labelStakingIcon->setToolTip(tr("Not minting.<br>Network weight is %1").arg(nNetworkWeight)); labelStakingIcon->setEnabled(false); labelStakingIcon->setPixmap(QIcon(":/icons/staking_off").pixmap(STATUSBAR_ICONSIZE, STATUSBAR_ICONSIZE)); } //overviewPage->setStrength(GetStrength(nWeight)); }
double ClientModel::getPoSKernelPS() { return GetPoSKernelPS(); }
void ProfitExplorerPage::loadStakeChart(bool firstRun) { if(fShutdown) return; nTimeData.clear(); netStakeData.clear(); myStakeData.clear(); difficultyData.clear(); velTimeData.clear(); velAmountData.clear(); // go back this many blocks max int max = ui->spinBox->value(); int i = 0; //BOOST_REVERSE_FOREACH(const PAIRTYPE(uint256, CBlockIndex*)& b, mapBlockIndex) //{ // if(i >= max) // break; CBlockIndex* pindex = pindexBest; while(i < max && pindex != NULL) { //CBlockIndex* pindex = b.second; if(pindex->IsProofOfStake()) { nTimeData.append(pindex->nTime); netStakeData.append(pindex->nMint / COIN); // Read the block in and check if the coinstake is ours CBlock block; block.ReadFromDisk(pindex, true); if(block.IsProofOfStake()) // this should always be true here { velTimeData.append(pindex->nTime); double blockOutAmount = 0; for(int j=0; j<block.vtx.size(); j++) { blockOutAmount += block.vtx[j].GetValueOut() / COIN; } velAmountData.append(blockOutAmount); difficultyData.append(GetDifficulty(pindex)); if(pwalletMain->IsMine(block.vtx[1])) { myStakeData.append(pindex->nMint / COIN); } else { myStakeData.append(0); } } else { myStakeData.append(0); // should never happen } i = i + 1; } pindex = pindex->pprev; //++i; } if(!firstRun) { uint64_t nMinWeight = 0, nMaxWeight = 0, nWeight = 0; pwalletMain->GetStakeWeight(*pwalletMain, nMinWeight, nMaxWeight, nWeight); uint64_t nNetworkWeight = 0; if(pindexBest) nNetworkWeight = GetPoSKernelPS(); bool staking = nLastCoinStakeSearchInterval && nWeight; int nExpectedTime = staking ? (nTargetSpacing * nNetworkWeight / nWeight) : -1; ui->stakingLabel->setText(staking ? "Enabled" : "Disabled"); if(pindexBest) ui->difficultyLabel->setText(QString::number(GetDifficulty(GetLastBlockIndex(pindexBest, true)))); ui->weightLabel->setText(QString::number(nWeight)); ui->netWeightLabel->setText(QString::number(nNetworkWeight)); ui->timeToStakeLabel->setText(QString::number(nExpectedTime) + " secs"); } //qDebug() << "Stake blocks processed:"; //qDebug() << i; ui->customPlot->clearPlottables(); ui->customPlot->clearGraphs(); ui->customPlot->clearItems(); ui->customPlot->addGraph(); ui->customPlot->graph(0)->setPen(QPen(QColor(206, 206, 206))); // line color green for first graph ui->customPlot->graph(0)->setBrush(QBrush(QColor(206, 206, 206, 20))); // first graph will be filled with translucent green ui->customPlot->addGraph(); ui->customPlot->graph(1)->setPen(QPen(QColor(76, 255, 0))); // line color red for second graph ui->customPlot->graph(1)->setBrush(QBrush(QColor(76, 255, 0, 20))); if(ui->networkCheckBox->isChecked()) ui->customPlot->graph(0)->setData(nTimeData, netStakeData); ui->customPlot->graph(1)->setData(nTimeData, myStakeData); //ui->customPlot->xAxis->setRangeLower(nTimeData.first()); //ui->customPlot->xAxis->setRangeUpper(nTimeData.last()); QLinearGradient plotGradient; plotGradient.setStart(0, 0); plotGradient.setFinalStop(0, 350); plotGradient.setColorAt(0, QColor(10, 10, 10)); plotGradient.setColorAt(1, QColor(0, 0, 0)); ui->customPlot->setBackground(plotGradient); ui->customPlot->xAxis->grid()->setVisible(false); ui->customPlot->yAxis->grid()->setVisible(false); ui->customPlot->xAxis->grid()->setSubGridVisible(false); ui->customPlot->yAxis->grid()->setSubGridVisible(false); ui->customPlot->xAxis->setAutoTickStep(true); ui->customPlot->xAxis->setTickStep(3600 * 24); // 24 hr tickstep ui->customPlot->xAxis->setTickLabelType(QCPAxis::ltDateTime); ui->customPlot->xAxis->setDateTimeSpec(Qt::UTC); ui->customPlot->xAxis->setDateTimeFormat("dd. MMM hh:mm"); ui->customPlot->xAxis->setTickLabelRotation(15); ui->customPlot->xAxis->setTickLabelColor(QColor(137, 140, 146)); ui->customPlot->yAxis->setTickLabelColor(QColor(137, 140, 146)); ui->customPlot->rescaleAxes(); ui->customPlot->xAxis->setLabelColor(QColor(137, 140, 146)); ui->customPlot->yAxis->setLabelColor(QColor(137, 140, 146)); ui->customPlot->yAxis->setLabel("$XQN Minted"); ui->customPlot->xAxis->setLabel("Stake Block Generation Time"); ui->customPlot->replot(); ui->difficultyPlot->clearPlottables(); ui->difficultyPlot->clearGraphs(); ui->difficultyPlot->clearItems(); ui->difficultyPlot->addGraph(); ui->difficultyPlot->graph(0)->setPen(QPen(QColor(76, 255, 0))); // line color green for first graph ui->difficultyPlot->graph(0)->setBrush(QBrush(QColor(76, 255, 0, 20))); // first graph will be filled with translucent green ui->difficultyPlot->graph(0)->setData(nTimeData, difficultyData); ui->difficultyPlot->xAxis->setRangeLower(nTimeData.first()); ui->difficultyPlot->xAxis->setRangeUpper(nTimeData.last()); QLinearGradient diffPlotGradient; diffPlotGradient.setStart(0, 0); diffPlotGradient.setFinalStop(0, 350); diffPlotGradient.setColorAt(0, QColor(10, 10, 10)); diffPlotGradient.setColorAt(1, QColor(0, 0, 0)); ui->difficultyPlot->setBackground(diffPlotGradient); ui->difficultyPlot->xAxis->grid()->setVisible(false); ui->difficultyPlot->yAxis->grid()->setVisible(false); ui->difficultyPlot->xAxis->grid()->setSubGridVisible(false); ui->difficultyPlot->yAxis->grid()->setSubGridVisible(false); ui->difficultyPlot->xAxis->setAutoTickStep(false); ui->difficultyPlot->xAxis->setTickStep(3600 * 24); // 24 hr tickstep ui->difficultyPlot->xAxis->setTickLabelType(QCPAxis::ltDateTime); ui->difficultyPlot->xAxis->setDateTimeSpec(Qt::UTC); ui->difficultyPlot->xAxis->setDateTimeFormat("dd. MMM hh:mm"); ui->difficultyPlot->xAxis->setTickLabelRotation(15); ui->difficultyPlot->xAxis->setTickLabelColor(QColor(137, 140, 146)); ui->difficultyPlot->yAxis->setTickLabelColor(QColor(137, 140, 146)); ui->difficultyPlot->rescaleAxes(); ui->difficultyPlot->yAxis->setTickStep(0.00005); ui->difficultyPlot->xAxis->setLabelColor(QColor(137, 140, 146)); ui->difficultyPlot->yAxis->setLabelColor(QColor(137, 140, 146)); ui->difficultyPlot->yAxis->setLabel("Difficulty"); ui->difficultyPlot->xAxis->setTickLabels(false); //ui->difficultyPlot->xAxis->setLabel("Stake Block Generation Time"); ui->difficultyPlot->replot(); ui->velocityPlot->clearPlottables(); ui->velocityPlot->clearGraphs(); ui->velocityPlot->clearItems(); ui->velocityPlot->addGraph(); ui->velocityPlot->graph(0)->setPen(QPen(QColor(76, 255, 0))); // line color green for first graph ui->velocityPlot->graph(0)->setBrush(QBrush(QColor(76, 255, 0, 20))); // first graph will be filled with translucent green ui->velocityPlot->graph(0)->setData(velTimeData, velAmountData); ui->velocityPlot->xAxis->setRangeLower(velTimeData.first()); ui->velocityPlot->xAxis->setRangeUpper(velTimeData.last()); QLinearGradient velPlotGradient; velPlotGradient.setStart(0, 0); velPlotGradient.setFinalStop(0, 150); velPlotGradient.setColorAt(0, QColor(10, 10, 10)); velPlotGradient.setColorAt(1, QColor(0, 0, 0)); ui->velocityPlot->setBackground(velPlotGradient); ui->velocityPlot->xAxis->grid()->setVisible(false); ui->velocityPlot->yAxis->grid()->setVisible(false); ui->velocityPlot->xAxis->grid()->setSubGridVisible(false); ui->velocityPlot->yAxis->grid()->setSubGridVisible(false); ui->velocityPlot->xAxis->setAutoTickStep(false); ui->velocityPlot->xAxis->setTickStep(3600 * 24); // 24 hr tickstep ui->velocityPlot->xAxis->setTickLabelType(QCPAxis::ltDateTime); ui->velocityPlot->xAxis->setDateTimeSpec(Qt::UTC); ui->velocityPlot->xAxis->setDateTimeFormat("dd. MMM hh:mm"); ui->velocityPlot->xAxis->setTickLabelRotation(15); ui->velocityPlot->xAxis->setTickLabelColor(QColor(137, 140, 146)); ui->velocityPlot->yAxis->setTickLabelColor(QColor(137, 140, 146)); ui->velocityPlot->yAxis->setScaleType(QCPAxis::stLogarithmic); ui->velocityPlot->yAxis->setTickStep(1000); ui->velocityPlot->xAxis->setLabelColor(QColor(137, 140, 146)); ui->velocityPlot->yAxis->setLabelColor(QColor(137, 140, 146)); ui->velocityPlot->yAxis->setLabel("$XQN"); ui->velocityPlot->xAxis->setTickLabels(false); ui->velocityPlot->xAxis->setLabel("Financial Velocity"); ui->velocityPlot->rescaleAxes(); ui->velocityPlot->replot(); }