Calculate actual kernel and coin*day rates on the fly.
[novacoin.git] / src / kernel.cpp
index c4283ed..1f27060 100644 (file)
@@ -7,10 +7,11 @@
 #include "kernel.h"
 #include "txdb.h"
 
+extern unsigned int nStakeMaxAge;
+extern unsigned int nStakeTargetSpacing;
+
 using namespace std;
 
-extern int nStakeMaxAge;
-extern int nStakeTargetSpacing;
 
 // Protocol switch time for fixed kernel modifier interval
 unsigned int nModifierSwitchTime  = 1413763200;    // Mon, 20 Oct 2014 00:00:00 GMT
@@ -390,11 +391,11 @@ bool CheckStakeKernelHash(unsigned int nBits, const CBlock& blockFrom, unsigned
 }
 
 // Scan given coins set for kernel solution
-bool ScanForStakeKernelHash(MetaMap &mapMeta, KernelSearchSettings &settings, CoinsSet::value_type &kernelcoin, unsigned int &nTimeTx, unsigned int &nBlockTime)
+bool ScanForStakeKernelHash(MetaMap &mapMeta, KernelSearchSettings &settings, CoinsSet::value_type &kernelcoin, unsigned int &nTimeTx, unsigned int &nBlockTime, uint64 &nKernelsTried, uint64 &nCoinDaysTried)
 {
     uint256 hashProofOfStake = 0;
 
-    // txid => ((txindex, (tx, vout.n)), (block, modifier))
+    // (txid, vout.n) => ((txindex, (tx, vout.n)), (block, modifier))
     for(MetaMap::const_iterator meta_item = mapMeta.begin(); meta_item != mapMeta.end(); meta_item++)
     {
         if (!fCoinsDataActual)
@@ -441,6 +442,10 @@ bool ScanForStakeKernelHash(MetaMap &mapMeta, KernelSearchSettings &settings, Co
             // Calculate kernel hash
             hashProofOfStake = Hash(ss.begin(), ss.end());
 
+            // Update statistics
+            nKernelsTried += 1;
+            nCoinDaysTried += bnCoinDayWeight.getuint64();
+
             if (bnTargetProofOfStake >= CBigNum(hashProofOfStake))
             {
                 if (fDebug)