columnPoSReward
authorfsb4000 <fsb4000@yandex.ru>
Thu, 20 Nov 2014 01:00:38 +0000 (07:00 +0600)
committerfsb4000 <fsb4000@yandex.ru>
Thu, 20 Nov 2014 01:00:38 +0000 (07:00 +0600)
Добавлен столбец показывающий потенциальную PoS награду.

src/kernelrecord.cpp
src/kernelrecord.h
src/qt/locale/bitcoin_ru.ts
src/qt/mintingtablemodel.cpp
src/qt/mintingtablemodel.h
src/qt/mintingview.cpp

index 8c1d778..2c6f2d9 100644 (file)
@@ -4,6 +4,8 @@
 #include "base58.h"
 #include "main.h"
 
+#include <math.h>
+
 using namespace std;
 
 bool KernelRecord::showTransaction(const CWalletTx &wtx)
@@ -75,6 +77,19 @@ int64 KernelRecord::getAge() const
     return (GetAdjustedTime() - nTime) / 86400;
 }
 
+double KernelRecord::getPoSReward(double difficulty, int minutes)
+{
+    double PoSReward;
+    int nWeight = GetAdjustedTime() - nTime + minutes * 60;
+    if( nWeight <  nStakeMinAge)
+        return 0;
+    uint64 coinAge = (nValue * nWeight ) / (COIN * 86400);
+    double nRewardCoinYear = floor(pow((0.03125 / difficulty), 1.0/3) *100)/100;
+    PoSReward = (coinAge * nRewardCoinYear )/365;
+    PoSReward = min(PoSReward,10.0);
+    return PoSReward;
+}
+
 double KernelRecord::getProbToMintStake(double difficulty, int timeOffset) const
 {
     //double maxTarget = pow(static_cast<double>(2), 224);
index d54e551..41b30ed 100644 (file)
@@ -43,6 +43,7 @@ public:
     int64 getAge() const;
     double getProbToMintStake(double difficulty, int timeOffset = 0) const;
     double getProbToMintWithinNMinutes(double difficulty, int minutes);
+    double getPoSReward(double difficulty, int timeOffset);
 protected:
     int prevMinutes;
     double prevDifficulty;
index 2cd4930..b71a3b5 100644 (file)
       <translation>Вероятность PoS</translation>
     </message>
     <message>
+      <source>MintReward</source>
+      <translation>Награда PoS</translation>
+    </message>
+    <message>
       <source>minutes</source>
       <translation>минут</translation>
     </message>
       <source>Chance to mint a block within given time interval.</source>
       <translation>Шанс найти блок в течение выбранного временного интервала.</translation>
     </message>
+    <message>
+      <source>The size of the potential rewards if the block is found at the beginning and the end given time interval.</source>
+      <translation>Размер потенциальной награды если блок найден в начале и конце выбранного временного интервала.</translation>
+    </message>
   </context>
 <context>
   <name>QObject</name>
   <message>
+    <source>Potential PoS reward = from  %1 to %2 </source>
+    <translation>Потенциальная PoS награда = от %1 до %2 </translation>
+  </message>
+  <message>
     <source>%1 d</source>
     <translation>%1 д</translation>
   </message>
index 4973480..f97520c 100644 (file)
 extern double GetDifficulty(const CBlockIndex* blockindex);
 
 static int column_alignments[] = {
-    Qt::AlignLeft|Qt::AlignVCenter,
-    Qt::AlignLeft|Qt::AlignVCenter,
-    Qt::AlignRight|Qt::AlignVCenter,
-    Qt::AlignRight|Qt::AlignVCenter,
-    Qt::AlignRight|Qt::AlignVCenter,
-    Qt::AlignRight|Qt::AlignVCenter
+    Qt::AlignCenter|Qt::AlignVCenter,
+    Qt::AlignCenter|Qt::AlignVCenter,
+    Qt::AlignCenter|Qt::AlignVCenter,
+    Qt::AlignCenter|Qt::AlignVCenter,
+    Qt::AlignCenter|Qt::AlignVCenter,
+    Qt::AlignCenter|Qt::AlignVCenter,
+    Qt::AlignCenter|Qt::AlignVCenter
 };
 
 struct TxLessThan
@@ -202,7 +203,7 @@ MintingTableModel::MintingTableModel(CWallet *wallet, WalletModel *parent):
         mintingInterval(10),
         priv(new MintingTablePriv(wallet, this))
 {
-    columns << tr("Transaction") <<  tr("Address") << tr("Age") << tr("Balance") << tr("CoinDay") << tr("MintProbability");
+    columns << tr("Transaction") <<  tr("Address") << tr("Age") << tr("Balance") << tr("CoinDay") << tr("MintProbability") << tr("MintReward");
     priv->refreshWallet();
 
     QTimer *timer = new QTimer(this);
@@ -273,6 +274,8 @@ QVariant MintingTableModel::data(const QModelIndex &index, int role) const
             return formatTxCoinDay(rec);
         case MintProbability:
             return formatDayToMint(rec);
+        case MintReward:
+            return formatTxPoSReward(rec);
         }
         break;
       case Qt::TextAlignmentRole:
@@ -316,6 +319,8 @@ QVariant MintingTableModel::data(const QModelIndex &index, int role) const
             return rec->nValue;
         case MintProbability:
             return getDayToMint(rec);
+        case MintReward:
+            return formatTxPoSReward(rec);
         }
         break;
       case Qt::BackgroundColorRole:
@@ -359,6 +364,16 @@ QString MintingTableModel::lookupAddress(const std::string &address, bool toolti
     return description;
 }
 
+QString MintingTableModel::formatTxPoSReward(KernelRecord *wtx) const
+{
+    QString posReward;
+    const CBlockIndex *p = GetLastBlockIndex(pindexBest, true);
+    double difficulty = GetDifficulty(p);
+    posReward += QString(QObject::tr("Potential PoS reward = from  %1 to %2 ")).arg(QString::number(wtx->getPoSReward(difficulty, 0),'f', 6), 
+                 QString::number(wtx->getPoSReward(difficulty, mintingInterval),'f', 6)); 
+    return posReward;
+}
+
 double MintingTableModel::getDayToMint(KernelRecord *wtx) const
 {
     const CBlockIndex *p = GetLastBlockIndex(pindexBest, true);
@@ -428,6 +443,8 @@ QVariant MintingTableModel::headerData(int section, Qt::Orientation orientation,
                 return tr("Coin age in the output.");
             case MintProbability:
                 return tr("Chance to mint a block within given time interval.");
+            case MintReward:
+                return tr("The size of the potential rewards if the block is found at the beginning and the end given time interval.");
             }
         }
     }
index c265ce5..68f963c 100644 (file)
@@ -23,7 +23,8 @@ public:
         Age = 2,
         Balance = 3,
         CoinDay = 4,
-        MintProbability = 5
+        MintProbability = 5,
+        MintReward = 6
     };
 
 
@@ -51,6 +52,7 @@ private:
     QString formatTxAge(const KernelRecord *wtx) const;
     QString formatTxBalance(const KernelRecord *wtx) const;
     QString formatTxCoinDay(const KernelRecord *wtx) const;
+    QString formatTxPoSReward(KernelRecord *wtx) const;
 private slots:
     void update();
 
index 07ecadf..40bd5ee 100644 (file)
@@ -118,7 +118,7 @@ void MintingView::setModel(WalletModel *model)
         mintingView->verticalHeader()->hide();
 
         mintingView->horizontalHeader()->resizeSection(
-                MintingTableModel::Address, 420);
+                MintingTableModel::Address, 300);
 #if QT_VERSION < 0x050000
         mintingView->horizontalHeader()->setResizeMode(
                 MintingTableModel::TxHash, QHeaderView::Stretch);
@@ -133,7 +133,9 @@ void MintingView::setModel(WalletModel *model)
         mintingView->horizontalHeader()->resizeSection(
                 MintingTableModel::CoinDay,120);
         mintingView->horizontalHeader()->resizeSection(
-                MintingTableModel::MintProbability, 160);
+                MintingTableModel::MintProbability, 120);
+        mintingView->horizontalHeader()->resizeSection(
+            MintingTableModel::MintReward, 300);
     }
 }
 
@@ -179,6 +181,7 @@ void MintingView::exportClicked()
     writer.addColumn(tr("CoinDay"), 0, MintingTableModel::CoinDay);
     writer.addColumn(tr("Balance"), 0, MintingTableModel::Balance);
     writer.addColumn(tr("MintingProbability"), 0, MintingTableModel::MintProbability);
+    writer.addColumn(tr("MintingReward"), 0, MintingTableModel::MintReward);
 
     if(!writer.write())
     {